介绍

Vertx-junit5该模块为使用 JUnit 5 编写 Vert.x 测试提供集成和支持

1. maven项目依赖

<dependencies><dependency><groupId>io.vertx</groupId><artifactId>vertx-web</artifactId></dependency><dependency><groupId>io.vertx</groupId><artifactId>vertx-config-yaml</artifactId></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency><dependency><groupId>com.lance.common</groupId><artifactId>vertx-common-core</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!-- Test --><dependency><groupId>io.vertx</groupId><artifactId>vertx-junit5</artifactId><scope>test</scope></dependency>
</dependencies>

2.YAML文件配置

server:port: 18002

3.启动加载配置文件, 并放入到config中去

public class UnitApplication {public static void main(String[] args) {Vertx vertx = Vertx.vertx();ConfigRetriever retriever = readYaml(vertx);retriever.getConfig(json -> {DeploymentOptions options = new DeploymentOptions().setConfig(json.result());vertx.deployVerticle(MainApp.class.getName(), options);});}private static ConfigRetriever readYaml(Vertx vertx) {ConfigStoreOptions store = new ConfigStoreOptions().setType("file").setFormat("yaml").setOptional(true).setConfig(new JsonObject().put("path", "application.yaml"));return ConfigRetriever.create(vertx, new ConfigRetrieverOptions().addStore(store));}
}

4.Vertx http client单元测试

Slf4j
@ExtendWith(VertxExtension.class)
class WebRequestTests {private final Vertx vertx = Vertx.vertx();/*** test vertx server*/@Test@Disabledvoid suite() {vertx.createHttpServer().requestHandler(req -> req.response().end("Ok")).listen(16969, ar -> {log.info("===> vertx start: {}", ar.succeeded());});}/*** 1.允许等待其他线程中的操作以通知完成, 类似java中promise对象* 2.支持接收断言失败以将测试标记为失败*/@Test@Disabledvoid asyncContext() throws Throwable {VertxTestContext testContext = new VertxTestContext();vertx.createHttpServer().requestHandler(req -> req.response().end()).listen(16969).onComplete(testContext.succeedingThenComplete());//.onComplete(testContext.failingThenComplete());Assertions.assertTrue(testContext.awaitCompletion(5, TimeUnit.SECONDS));if (testContext.failed()) {throw testContext.causeOfFailure();}}/*** Test http client*/@Test@Disabledvoid httpClient() throws Exception {HttpClient client = vertx.createHttpClient();VertxTestContext testContext = new VertxTestContext();client.request(HttpMethod.GET, 18002, "127.0.0.1", "/user/info/2").compose(req -> req.send().compose(HttpClientResponse::body)).onComplete(testContext.succeeding(buffer -> testContext.verify(() -> {JsonObject jsonObject = buffer.toJsonObject();log.info("===>Response body: {}", jsonObject);Assertions.assertEquals(jsonObject.getString("code"), HttpResponseStatus.OK.reasonPhrase());testContext.completeNow();}))).onFailure(event -> log.error("===>fail: ", event.getCause()));boolean awaitResult = testContext.awaitCompletion(30, TimeUnit.SECONDS);log.info("===>Await: {}", awaitResult);}/*** 只需调用即可将许多测试标记为通过completeNow在执行的某个时间点。话虽如此,在许多情况下,测试的成功取决于要验证的不同异步部分。*/@Test@Disabledvoid checkpoint() {int port = 9001;VertxTestContext testContext = new VertxTestContext();Checkpoint serverStarted = testContext.checkpoint();Checkpoint requestsServed = testContext.checkpoint(10);Checkpoint responsesReceived = testContext.checkpoint(10);vertx.createHttpServer().requestHandler(req -> {req.response().end("success");requestsServed.flag();}).listen(port).onComplete(testContext.succeeding(httpServer -> {serverStarted.flag();HttpClient client = vertx.createHttpClient();for (int i = 0; i < 10; i++) {client.request(HttpMethod.GET, port, "localhost", "/").compose(req -> req.send().compose(HttpClientResponse::body)).onComplete(testContext.succeeding(buffer -> testContext.verify(() -> {Assertions.assertEquals("success", buffer.toString());responsesReceived.flag();})));}}));}
}

5.Vertx test context单元测试

@Slf4j
@ExtendWith(VertxExtension.class)
class VertxExtensionTests {private final int port = 9000;@BeforeEachvoid init(Vertx vertx, VertxTestContext testContext) {vertx.deployVerticle(new HttpServerVertical(), testContext.succeedingThenComplete());}@AfterEachpublic void after(Vertx vertx) {log.info("===>Vertx close.");vertx.close();}/*** 连续测试3次* repetition 1 of 3* repetition 2 of 3* repetition 3 of 3*/@Disabled@RepeatedTest(3)void request3Times(Vertx vertx, VertxTestContext testContext) {HttpClient client = vertx.createHttpClient();client.request(HttpMethod.GET, port, "localhost", "/").compose(req -> req.send().compose(HttpClientResponse::body)).onComplete(testContext.succeeding(buffer -> testContext.verify(() -> {log.info("===>Response result: {}", buffer.toString());testContext.completeNow();})));}@Test@Timeout(value = 100, unit = TimeUnit.MILLISECONDS)void timeout(Vertx vertx, VertxTestContext testContext) {HttpClient client = vertx.createHttpClient();client.request(HttpMethod.GET, port, "localhost", "/").compose(req -> req.send().compose(HttpClientResponse::body)).onComplete(testContext.succeeding(buffer -> testContext.verify(() -> {Thread.sleep(5000L);log.info("===>Response timeout result: {}", buffer.toString());testContext.completeNow();})));}/*** 单服务测试*/@Test@Disabledvoid httpServerResponse(Vertx vertx, VertxTestContext testContext) {vertx.deployVerticle(new HttpServerVertical(), testContext.succeeding(id -> {HttpClient client = vertx.createHttpClient();client.request(HttpMethod.GET, port, "localhost", "/").compose(req -> req.send().compose(HttpClientResponse::body)).onComplete(testContext.succeeding(buffer -> testContext.verify(() -> {log.info("===>Response result: {}", buffer.toString());Assertions.assertEquals(buffer.toString(), "success");testContext.completeNow();})));}));}class HttpServerVertical extends AbstractVerticle {@Overridepublic void start() throws Exception {vertx.createHttpServer().requestHandler(req -> {req.response().end("success");}).listen(port).onComplete(event -> {if (event.succeeded()) {log.info("===>Start [{}] success!", port);return;}log.error("===>Start fail: ", event.cause());});}}
}

6.项目完整地址

Vertx之Junit单元测试 Github 地址

Vertx之Junit单元测试 Gitee 地址

Vertx之Junit单元测试相关推荐

  1. JUnit单元测试依赖包构建路径错误解决办法

    JUnit单元测试依赖包构建路径错误解决办法: 选中报错的项目文件夹→右击选择属性(ALT+Enter)→java构建路径→库→添加库→JUnit→选择合适的Junit库版本.

  2. Junit单元测试需要知道的一些知识点

    Junit单元测试框架-基于java语言对的主流单元测试框架 @beforeClass-位于数据准备前期或者其他前期准备(测试类调用前) --用于提取代码中的共用部分减少冗余,只能声明注解一次 --必 ...

  3. java中JUnit单元测试的使用方法

    package com.atguigu.java2;import java.sql.Date;import org.junit.Test;/** java中的JUnit单元测试* 步骤:(可以直接写@ ...

  4. JUnit单元测试中的setUpBeforeClass()、tearDownAfterClass()、setUp()、tearDown()方法小结

    编写JUnit单元测试的时候,会用到 setUpBeforeClass().tearDownAfterClass().setUp().tearDown()这四个方法,例如用 eclipse新建一个ju ...

  5. SSM中进行Junit单元测试时无法注入service

    场景 在SSM项目中进行Junit单元测试时调用外部的service时,在使用时打断点发现为空. 代码如下: public class AlipayTester {private PassOrderS ...

  6. surefire 拉起 junit 单元测试类 源码阅读(一)

    根据surefire 拉起Junit单元测试类 输出的报错日志 跟踪执行过程: 日志1: java.lang.reflect.InvocationTargetExceptionat sun.refle ...

  7. junit单元测试断言_简而言之,JUnit:单元测试断言

    junit单元测试断言 简而言之,本章涵盖了各种单元测试声明技术. 它详细说明了内置机制, Hamcrest匹配器和AssertJ断言的优缺点 . 正在进行的示例扩大了主题,并说明了如何创建和使用自定 ...

  8. spring junit单元测试

    项目是有很多个功能块组成的,我们开发的时候,当我们开发出来一个功能,想要测试这个功能是否正确,不可能等到前端和后端全部写好了再进行测试,这样太浪费时间,有没有什么方法能直接测试后台的功能写的是否正确( ...

  9. Spring框架 JdbcTemplate类 @Junit单元测试,可以让方法独立执行 如:@Test

    1 package cn.zmh.PingCe; 2 3 import org.junit.Test; 4 import org.springframework.jdbc.core.BeanPrope ...

最新文章

  1. 在PHP中实现StringBuilder类
  2. PHP: How to print a debug log?
  3. 数据结构--链表--LRU缓存
  4. java fastjson 泛型_解决fastjson泛型转换报错的解决方法
  5. java中字符串(1)
  6. 服务器挂在公网,如何禁止公司以外的人访问公司网站
  7. 深度强化学习之近端策略优化(Proximal Policy Optimization)
  8. mysql人脸数据库_人脸数据库汇总
  9. 06. Java面向对象——更改器方法和访问器方法
  10. 计算机按键 shift的作用,Shift键的作用大全 Shift是什么意思
  11. 如何解决DMS的个人数据隐私问题?ToF技术路线在路上
  12. 淘宝自动回复机器人配置手册——利用旺旺分流针对性配置
  13. Unity获取手机app列表《三》安卓端
  14. LeetCode - 362 敲击计数器(设计)
  15. rails连接Mysql的数据库
  16. 如何30天零基础入门网络安全?自学网络安全有哪些缺点?
  17. java大学教程_JAVA大学实用教程 第4版 PDF 下载
  18. 论文推荐:SoLid 通过让公民控制自己的数据简化政府流程
  19. 航空行业数字化转型解决方案(附PDF下载)
  20. 一文教你弄懂Flink核心功能和原理

热门文章

  1. BigDecimal.setScale
  2. c语言中 加法符号如何定义,【 c语言中无符号和有符号的加法运算】【深入理解】--【sky原创】...
  3. SQL小白超级推荐自学入门书籍
  4. 图形处理之Delaunay三角剖分vtkDelaunay2D
  5. 买房必知:需要什么手续 按揭买房需要哪些证件
  6. 2021年茶艺师(中级)考试题库及茶艺师(中级)试题及答案
  7. 安装破解Navicat
  8. mc有什么红石机器人_我的世界红石机器人怎么做_我的世界红石机器人制作教程...
  9. 那些收入百万的NFT收藏者都做对了什么?
  10. android 代码功能测试,Android app 功能代码覆盖率--Jacoco