我正在尝试为我的一个测试用例的java.io.File
类的createTempFile
方法调用IO异常。
我认为这样做的一种方法是为单个测试用例设置Property值,如下所示:
class TestClass {
@Test
testCase1() {
// do something
}
@Test
testCase2() {
String oldValue = System.getProperty("java.io.tmpdir");
System.setProperty("java.io.tmpdir", "/no/such/dir");
// invoke test case
System.setProperty("java.io.tmpdir", oldValue);
}
然而,我遇到的问题是,尽管我只在单个测试用例(testCase2
)中设置system属性,但它会影响整个类中的所有其他测试用例,例如testCase
(和测试文件夹)。
有人知道我做错了什么吗?
我尝试打印测试用例中System.setProperty("java.io.tmpdir", oldValue)
的值,在这些测试用例中,我没有更改该属性,并且它看起来是正确的。
1条答案
按热度按时间hmtdttj41#
问题不在于属性的设置,而在于JDK只初始化用于
File.createTempFile
的目录一次,并使用该单个初始化的目录,当使用Files
中的方法创建临时文件或目录时也是如此。如果可以更改原始代码,请使用重载的变体,这些变体允许您自己设置目录。例如:
还有一个问题是如何设置系统属性,更重要的是如何重置系统属性。如果测试失败,重置将不会发生。可以使用try-finally块,或者更简单,使用JUnit Pioneer: