Java 在Junit4中,如何基于@Test注释更改@Before行为
我想让@Before方法知道当前正在执行的测试注释,以便@Before方法可以做各种事情。具体来说,现在我们的@Before总是执行各种初始化步骤,如重新加载数据库等。我希望能够编写如下代码:Java 在Junit4中,如何基于@Test注释更改@Before行为,java,unit-testing,junit4,Java,Unit Testing,Junit4,我想让@Before方法知道当前正在执行的测试注释,以便@Before方法可以做各种事情。具体来说,现在我们的@Before总是执行各种初始化步骤,如重新加载数据库等。我希望能够编写如下代码: @Before void setUp() { if (testMethod.hasAnnotation(@NeedsDatabase)) { reloadDatabase(); } } 我想一个解决方案是使用@Rule进行DB初始化,但这将很难实现,我们现有的基础设施已经
@Before
void setUp() {
if (testMethod.hasAnnotation(@NeedsDatabase)) {
reloadDatabase();
}
}
我想一个解决方案是使用@Rule进行DB初始化,但这将很难实现,我们现有的基础设施已经在@setUp中处理了这个问题。我们已经有了一个定制的运行程序,所有的测试都扩展了一个共享基类,如果这有帮助的话
我试图想出一种方法来做到这一点,但我不知道JUnit4中提供了什么。您可以使用注释,创建自己的注释,扫描@NeedsDatabase注释并适当地处理设置。使用@Rule with TestWatcher并实现starting()
有一些方法可以模拟您的需要,并且不会不必要地在代码中添加太多间接内容。我会保持简单:在任何“需要数据库”的测试中,只需调用一个特殊的setupDB方法。这将使测试独立于运行它们的任何外部框架。一般来说,单元测试的干式策略不会增加太多的值。starting()是在@before之前还是之后执行的?我现在无法将该行为从@Before中移出,但如果我能在start()中获取注释[]列表并将其存储在类本地成员变量中,那就行了。