为什么在Powermock单元测试中,getClass().getResource()在第二次@Test时返回null



我有一个单元测试类,它需要从资源加载到文件中。所以我有这样的东西:

@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中的临时文件。你不必那样做,但这是一个巧妙的解决方案。

相关内容

  • 没有找到相关文章

最新更新