今天我遇到了自己的混乱:JUnit的TemporaryFolder
创建的临时文件夹中有几千兆字节的临时测试数据未被清理。
似乎如果您的测试没有@After
方法,则@Rule
也不会after()
。
有没有办法确保(以编程方式)使用@Before
方法的测试也至少一个@After
方法?
答案 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");
}
}
}
}