1

今天我碰到了自己的烂摊子:由 JUnit 创建的临时文件夹中有几 GB 的临时测试数据TemporaryFolder没有被清理。

似乎如果您的测试没有@After方法,则@Rules 也不会被after()编辑。

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

4

2 回答 2

4

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

于 2013-05-30T13:36:10.197 回答
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");
      }
    }
  }
}
于 2013-05-30T13:19:52.477 回答