今天我碰到了自己的烂摊子:由 JUnit 创建的临时文件夹中有几 GB 的临时测试数据TemporaryFolder
没有被清理。
似乎如果您的测试没有@After
方法,则@Rule
s 也不会被after()
编辑。
有没有办法(以编程方式)确保使用方法的测试@Before
也至少有一种@After
方法?
是否存在@After
方法对 JUnit 规则没有影响。一般来说,@After
它的使用频率远低于@Before
JUnit 测试。如果TemporaryFolder
规则没有清理,那么它可能没有成功删除文件,例如由于文件权限问题。从TemporaryFolder
的源代码中可以看出,在这种情况下您不会收到错误或警告(File.delete
不使用的返回值)。另一种可能性是 JVM 崩溃或被控制测试执行的一方(IDE、构建工具、CI 服务器)终止。
您可以遍历所有测试文件并检查内容以确保存在 @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");
}
}
}
}