java - 如何在 Vert.x 中对 Handler<RoutingContext> 进行单元测试?

标签 java unit-testing junit vert.x

我有:

Router.router(vertx).route().handler(new Handler<RoutingContext>() {
    @Override
    public void handle(RoutingContext event) {
        HttpServerRequest request = event.request();
        Buffer body = event.getBody();
        HttpServerResponse response = event.response();
        // Some code to test
        response.setStatusCode(200);
        response.end();
    }
});

如何通过提供准备好的请求和正文并检查响应来对此进行单元测试?

最佳答案

通常测试此类端点更多的是集成测试而不是单元测试。 没必要 mock 一切。模拟旨在测试一些在您的测试上下文中不可用的外部服务。这是使用 vert.x 进行集成测试的示例:

@ExtendWith(VertxExtension.class)
class IntegrationTest {
private static RequestSpecification requestSpecification;

  @BeforeAll
  static void prepareSpec() {
    requestSpecification = new RequestSpecBuilder()
      .addFilters(asList(new ResponseLoggingFilter(), new RequestLoggingFilter()))
      .setBaseUri("http://localhost:3002/")// Depends on your verticle config.
      .build();
  }

@BeforeEach
  void setup(Vertx vertx, VertxTestContext testContext) {

    vertx
        .deployVerticle(new MyVerticle(), 
                ar -> {
                    if(ar.succeeded()) {
                        testContext.completeNow();
                    } else {
                        testContext.failNow(ar.cause());
                    }
                }
        );
  }

@Test
  @DisplayName("Test message")
  void test() {
    JsonObject body = new JsonObject();//Fill it as you want

    given(requestSpecification)
      .contentType(ContentType.JSON)
      .body(body.encode())
      .post("/yourreqest")//Your resource path
      .then()
      .assertThat()
      .statusCode(200);//expected status
}

关于java - 如何在 Vert.x 中对 Handler<RoutingContext> 进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59378705/

相关文章:

java - 在 Robolectric 测试中注入(inject)模拟

python - 生成器返回失败的 Mocks assert_called_with

python - 测试对 input() 的多次调用

java - 无法使用第二个数据源运行 Spring JUnit 测试

java - 在 Jboss 上为 JAX-RS 2.0/Resteasy Client 设置超时

java - 线程 "main"java.lang.NoClassDefFoundError : net/arnx/jsonic/JSONException 中出现异常

java - JUnit 4 中的非 void 测试方法

java - "Exception in thread "主要 "java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing"

java - 无法使用 ant 运行 GWTTestCase 测试

java - 从 domino 向 bluemix 发送 https 请求