public class HelloVerticle extends AbstractVerticle {
@Override
public void start() throws Exception {
String greetingName = config().getString("greetingName", "Welt");
String greetingNameEnv = System.getenv("GREETING_NAME");
String greetingNameProp = System.getProperty("greetingName");
Router router = Router.router(vertx);
router.get("/hska").handler(routingContext -> {
routingContext.response().end(String.format("Hallo %s!", greetingName));
});
router.get().handler(routingContext -> {
routingContext.response().end("Hallo Welt");
});
vertx
.createHttpServer()
.requestHandler(router::accept)
.listen(8080);
}
}
我想对这个verticle进行单元测试,但我不知道如何等待verticle被部署。
@Before
public void setup(TestContext context) throws InterruptedException {
vertx = Vertx.vertx();
JsonObject config = new JsonObject().put("greetingName", "Unit Test");
vertx.deployVerticle(HelloVerticle.class.getName(), new DeploymentOptions().setConfig(config));
}
当我像这样设置测试时,我必须在deploy调用之后添加线程.sleep
,以便在对verticle进行一段时间的填充后执行测试。
我听说了等待,应该可以等待verticle与这个库一起部署。但是我没有找到关于如何将等待性与vertx-unit和deployverticle
方法一起使用的任何示例。
或者在测试中调用deployverticle
-method后,我真的必须硬编码睡眠计时器吗?
看一看公认答案的注释
首先,您需要实现start(Future Future)
,而不仅仅是start()
。然后,您需要向Listen(...)
调用添加回调处理程序(处理程序
)-该调用然后解析通过Start(Future Future)
获得的Future
。
vert.x是高度异步的--vert.x HTTP服务器的开始也是如此。在您的示例中,当HTTP服务器成功启动时,Verticle将完全起作用。因此,您需要实现我上面提到的东西。
其次,您需要告诉TestContext
Verticle的异步部署已经完成。这可以通过另一个回调处理程序完成(处理程序
)。下面的博客文章展示了如何做到这一点。Verticle的部署始终是异步的,即使您实现了普通的start()
方法。因此,如果您希望确保Verticle在测试前已成功部署,则应始终使用CompletionHandler
。
所以,不,您不需要也绝对不应该在任何Vert.x应用程序中硬编码睡眠计时器。注意金科玉律--不要阻塞事件循环。
编辑:
如果Verticle的初始化是同步的,那么应该覆盖普通的start()
方法-就像文档中提到的那样:
我有一个触发器,当opportunity更新时触发,作为其中的一部分,我需要调用我们的API,并提供opportunity的一些详细信息。 根据Web上的许多建议,我创建了一个类,其中包含一个@Future方法来制作标注。 我试图捕获在@future方法中抛出的异常,但测试方法没有看到它。 测试中的类如下所示: 下面是单元测试: 现在,我已经读到,测试@future方法的方法是用测试来围绕调用。s
本文向大家介绍使用Go进行单元测试的实现,包括了使用Go进行单元测试的实现的使用技巧和注意事项,需要的朋友参考一下 简介 日常开发中, 测试是不能缺少的. Go 标准库中有一个叫做 testing 的测试框架, 可以用于单元测试和性能测试. 它是和命令 go test 集成使用的. 测试文件是以后缀 _test.go 命名的, 通常和被测试的文件放在同一个包中. 单元测试 单元测试的格式形如: 在
我正在将Grails2中的一系列单元测试升级到Grails3,并且在使用GORM动态方法的域测试中遇到了问题--特别是addTo{myHasMany}方法。 给定以下域对象 > 我尝试使用DomainClassUnitTestMixin和mockDomain()方法模拟Contact实例,以生成带有GORM方法(或子集)的实例。 我已经尝试了使用基于Spock交互的测试支持的方法。 事实上,我已经
问题内容: 我有以前具有大量方法的类,因此我将此方法的工作细分为“辅助”方法。 这些辅助方法声明为强制执行封装- 但是我想对大型公共方法进行单元测试。是否也可以对辅助方法进行单元测试,好象其中的一个失败,而调用它的公共方法也会失败,这样我们就可以确定为什么失败了? 另外,为了使用模拟对象测试这些对象,我需要将其可见性从私有更改为受保护,这是否可取? 问题答案: 一种方法是省略测试并将其放在同一程序
测试失败,因为为。为什么不以阻塞的方式在ViewModel中运行块? 我知道,如果将其转换为返回对象的方法,则可以通过调用获取对象,或者可以返回并调用。但是,我想通过将我的ViewModel方法保留为函数来实现这一点,有没有办法做到这一点呢?
我在单元测试中使用了Moq框架。这是UpdateApplication测试方法: 我在运行测试时遇到一个异常: 我应该如何编写使用Moq更新和删除操作的单元测试?