在我的项目中,我必须在所有测试之前进行一些存储库设置。这是使用一些棘手的静态规则完成的。然而,我不知道在所有测试之后如何进行清理。我不想保留一些神奇的静态数字来指代所有测试方法的数量,我应该一直保持这些数字。
最受欢迎的方法是添加一些在所有测试后调用的侦听器。 JUnit4中是否有任何接口?
编辑:这与@BeforeClass和@AfterClass无关,因为我必须知道最后一次是否调用了使用@AfterClass注释的方法。
答案 0 :(得分:40)
我建议使用org.junit.runner.notification.RunListener,例如:
public class TestListener extends RunListener {
@Override
public void testRunStarted(Description description) throws Exception {
// Called before any tests have been run.
}
@Override
public void testRunFinished(Result result) throws Exception {
// Called when all tests have finished
}
}
直接在JUnit java doc中阅读。 您可以通过在插件配置中添加以下代码来使用Maven的surefire(单元测试)插件或故障安全插件(集成测试):
<properties>
<property>
<name>listener</name>
<value>com.innovatrics.afismq.it.TestListener</value>
</property>
</properties>
答案 1 :(得分:38)
我正在使用JUnit 4.9。这会有帮助吗?:
import junit.framework.TestCase;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({First.class,Second.class,Third.class})
public class RunTestSuite extends TestCase {
@BeforeClass
public static void doYourOneTimeSetup() {
...
}
@AfterClass
public static void doYourOneTimeTeardown() {
...
}
}
编辑:我非常积极(除非我误解了你的问题),我的解决方案就是您正在寻找的。即所有测试运行后的一种拆卸方法。不需要监听器,JUnit有这个功能。感谢。
答案 2 :(得分:9)
刚遇到同样的问题。
我的解决方案:
Runtime.getRuntime().addShutdownHook(new Thread(() -> do_your_global_cleanup())));
答案 3 :(得分:0)
您始终可以编写自定义TestRunner。但是,在您这样做之前,您需要评估相同的需求。最好使用@BeforeClass和@AfterClass。我可以指出的另一个例子是,hibernate允许用户使用'import.sql'进行单元测试的方式。
答案 4 :(得分:0)
无需使用套件,只需添加@BeforeClass和@AfterClass作为静态
select
min(id) as head_id,
bill_freq,
Paid_From,
Paid_To,
Paid_Dt
from
`psr_20160708091408` where bill_freq;