我有一个单元测试类,它需要从资源加载到文件中。所以我有这样的东西:
@RunWith(PowerMockRunner.class)
@PrepareForTest(MyClass.class)
public class MyClassTest {
private File resourceFile;
@Before
public void setup() {
// The first time this is called, resourceFile is set up correctly
// However, the second time, the call to getResource() returns a null and thus
// an exception is thrown.
if (resourceFile == null) {
resourceFile = new File(getClass().getResource("/file.wav").getPath());
}
}
@Test
public void firstTest() {
// resourceFile is available here
}
@Test
public void secondTest() {
// resourceFile is null here
}
}
问题是,资源中的文件可以在第一次调用setup()时找到,但奇怪的是,当第二次调用setup()时,resourceFile再次为null(这对我来说是另一个谜;在我看来,我认为应该已经设置好了),所以必须再次设置,但随后调用getResource()返回null,因此引发异常。这几乎就像整个MyTestClass在@Test调用之间被重置一样。即使在@Before方法之外初始化resourceFile也不起作用。
我对单元测试有点陌生,所以如果有人能阐明这个问题,那就太好了。
由于测试会删除源文件,请在运行测试之前将资源复制到临时位置。无论如何,这是一种很好的做法,可以避免损坏测试资源。
看看使用JUnit的临时文件支持:使用JUnit 4.7中的临时文件。你不必那样做,但这是一个巧妙的解决方案。