如何确保JUnit @Before附带@After

时间:2013-05-30 13:12:00

标签: java junit

今天我遇到了自己的混乱:JUnit的TemporaryFolder创建的临时文件夹中有几千兆字节的临时测试数据未被清理。

似乎如果您的测试没有@After方法,则@Rule也不会after()

有没有办法确保(以编程方式)使用@Before方法的测试也至少一个@After方法?

2 个答案:

答案 0 :(得分:4)

缺少@After方法的存在对JUnit规则没有影响。通常,在JUnit测试中,@After的使用频率远低于@Before。如果TemporaryFolder规则未清除,则可能无法成功删除文件,例如由于文件权限问题。从TemporaryFolder的源代码可以看出,在这种情况下你不会收到错误或警告(不使用File.delete的返回值)。另一种可能性是JVM崩溃或被控制测试执行的一方(IDE,构建工具,CI服务器)终止。

答案 1 :(得分:0)

您可以浏览所有测试文件并检查内容以确保@Before存在,然后@After也是如此。我做了很多这样的事情,我发现它运行得非常迅速,可以包含在一个单元测试套件中。

当然,这并不能证明你在@After方法中做的正确。

这样的事情应该让你开始

for (File file : new File(yourTestDirectory).listFiles()) {
   for (String contents : Files.toString(file, Charset.defaultCharset())) {
    if(contents.contains("@Before")){
      if(!contents.contains("@After"){
        fail("must have @Before and @After");
      }
    }
  }
}