【发布时间】:2011-10-28 05:50:14
【问题描述】:
我希望我的@Before 方法知道当前正在执行的测试注解,以便@Before 方法可以做各种事情。具体来说,现在我们的@Before 总是执行各种初始化步骤,例如重新加载数据库等。我希望能够编写这样的代码:
@Before
void setUp() {
if (testMethod.hasAnnotation(@NeedsDatabase)) {
reloadDatabase();
}
}
我想一种解决方案是使用@Rule 进行数据库初始化,但这实施起来会很复杂,而且我们现有的基础设施已经在@setUp 中处理了这个问题。我们已经有一个自定义的 Runner,所有测试都扩展了一个共享的基类,如果有帮助的话。
我试图想办法做到这一点,但我不知道 JUnit4 中有什么可用的。
【问题讨论】:
-
有一些方法可以模拟您的需求,并且不会不必要地向代码添加过多的间接性。我会保持简单:在任何“需要数据库”的测试中,只需调用一个特殊的 setupDB 方法。这将使测试独立于运行它们的任何外部框架。一般来说,单元测试的 DRY 策略不会增加太多价值。
标签: java unit-testing junit4