Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Junit4中,如何基于@Test注释更改@Before行为_Java_Unit Testing_Junit4 - Fatal编程技术网

Java 在Junit4中,如何基于@Test注释更改@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方法知道当前正在执行的测试注释,以便@Before方法可以做各种事情。具体来说,现在我们的@Before总是执行各种初始化步骤,如重新加载数据库等。我希望能够编写如下代码:

@Before
void setUp() {
    if (testMethod.hasAnnotation(@NeedsDatabase)) {
        reloadDatabase();
    }
}
我想一个解决方案是使用@Rule进行DB初始化,但这将很难实现,我们现有的基础设施已经在@setUp中处理了这个问题。我们已经有了一个定制的运行程序,所有的测试都扩展了一个共享基类,如果这有帮助的话


我试图想出一种方法来做到这一点,但我不知道JUnit4中提供了什么。

您可以使用注释,创建自己的注释,扫描@NeedsDatabase注释并适当地处理设置。

使用@Rule with TestWatcher并实现starting()


有一些方法可以模拟您的需要,并且不会不必要地在代码中添加太多间接内容。我会保持简单:在任何“需要数据库”的测试中,只需调用一个特殊的setupDB方法。这将使测试独立于运行它们的任何外部框架。一般来说,单元测试的干式策略不会增加太多的值。starting()是在@before之前还是之后执行的?我现在无法将该行为从@Before中移出,但如果我能在start()中获取注释[]列表并将其存储在类本地成员变量中,那就行了。