1

我有一系列单元测试都需要与 Apache Zookeeper 服务器通信。显然,如果我有一个用于模拟服务器连接的库(或一个简单的方法来滚动我自己的),那将是最佳的,但据我所知,此时不存在,并且引擎盖下有足够的移动部件让我犹豫手动尝试。

因此,到目前为止,我们的解决方案是在本地建立一个虚拟服务器,执行测试,然后在最后将其拆除。这种工作,虽然据我所知,没有简单的方法告诉 Surefire 在整个测试运行中做一次 - 充其量,我有@BeforeClass@AfterClass装饰。

Zookeeper 初始化过程将原本应该是几毫秒的测试运行时间变成了每班几秒钟,这对整个项目来说是几分钟。如果我可以设置测试,让它建立一个服务器,运行每个测试,然后将其拆除,我想我会看到至少一个数量级的加速。

有简单的解决方法吗?我会以错误的方式解决这个问题吗?如果有一个现有的 mock-zookeeper 库,或者我自己的一个简单的方法,那也是一个很好的解决方案。

4

3 回答 3

3

听起来像是集成测试。查看“故障安全”而不是“万无一失”,并在额外的生命周期阶段执行昂贵的工作,以设置和拆卸集成测试。

于 2011-09-14T19:51:54.210 回答
1

如果您可以选择使用TestNG,则可以使用 @BeforeSuite。

于 2011-09-15T17:36:30.280 回答
0

您可能想检查 Spring 中的AbstractSingleSpringContextTests类。此类为所有setDirty()子类加载 Spring 上下文,并且仅在调用该方法时才重新加载它。

不完全是您想要的,但我相信您可以复制该模式并使用它来启动一个模拟 Zookeeper 服务器。

于 2011-09-14T19:50:48.373 回答