[英]Create temporary directory for Junit test in static method for theory
我有一些代码将文件写入到我选择的目录中。 我目前有一个测试,该测试利用JUnit理论在许多不同目录下运行此代码。 它看起来类似于:
@DataPoints
public static File[] produceListOfDirs() {
return new File[] {
new File("some directory path here")
}
}
@Theory
public void myTest(File f) {
... run my code being tested with f ...
}
问题是我希望在测试完成时(无论是成功还是失败)都删除要创建的目录(以及在其中创建的文件)。
理想情况下,这只是使用@Rule
指定一个临时目录并使用它:
@Rule
public TemporaryFolder testFolder = new TemporaryFolder();
@DataPoints
public static File[] produceListOfDirs() {
return new File[] {
new File(testFolder.getRoot())
}
}
@Theory
public void myTest(File f) {
... run my code being tested with f ...
}
但是,这里的问题当然是@DataPoints只能注释静态方法,并且TemporaryFolder规则一定不能是静态的。
有什么优雅的解决方案吗?
尝试在方法上使用@BeforeClass
批注,以将所需的目录或文件设置为测试类的字段。 然后,可以使用@AfterClass
注释将它们拆掉。
private static File directory;
@BeforeClass
public static void setup() {
directory = new File("/path/to/file");
if(!directory.exists()){
directory.mkdir();
}
}
@AfterClass
public static void teardown() {
if(directory.exists()){
FileUtils.deleteDirectory(directory); //apache-commons-io
}
}
@课前
有时,一些测试需要共享计算量大的设置(例如登录数据库)。 尽管这可能会损害测试的独立性,但有时这是必要的优化。 用@BeforeClass注释一个公共的静态void no-arg方法会导致它在类中的任何测试方法之前运行一次。 超类的@BeforeClass方法将在当前类之前运行。 文档
@下课以后
如果您在BeforeClass方法中分配了昂贵的外部资源,则需要在类中的所有测试运行后释放它们。 使用@AfterClass注释公共静态void方法会使该方法在类中的所有测试均已运行之后运行。 即使BeforeClass方法抛出异常,也保证所有@AfterClass方法都可以运行。 在超类中声明的@AfterClass方法将在当前类的方法之后运行。 文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.