我有:
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();
}
});
如何通过给出准备好的请求和正文以及检查响应来对它进行单元测试?
答案 0 :(得分:0)
此处要测试的单元是Handler
的实现。
因此将匿名类更改为(至少)一个(非private
)static
内部类。
class MyHandler implements 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();
}
};
Router.router(vertx).route()。handler(new MyHandler());
然后,您可以创建Handlre的实例,以测试{em}返回context
和request
的模拟结果,以测试 mock 中的通过。
response
答案 1 :(得分:0)
通常,测试这种端点更多是集成测试而不是单元测试。 无需嘲笑一切。模拟是为了测试某些外部服务,这些服务在您的测试环境中不可用。这是一个与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
}