PowerMock mockStatic没有嘲笑这个类

时间:2016-03-30 21:51:50

标签: java unit-testing powermock easymock

我有以下课程(及其中的方法)

班级提升者{

 public void fetch(String key){
      File file = File.createTempFile(key,"*.txt");
      ..... 
      ....
 } 

}

我想对此方法进行单元测试,并希望模拟createTempFile方法 为此,我已经编写了如下单元测试

@RunWith(PowerMockRunner.class)

@PrepareForTest({File.class})

public class FetcherTest {

    public void test() {
        String key = "key";
        File file = new File("Hello");
        PowerMock.mockStatic(File.class);
        EasyMock.expect(File.createTempFile(EasyMock.anyObject(String.class),EasyMock.anyObject(String.class))).andReturn(file).once();
        PowerMock.replay(File.class);
        Fetcher fetcher = new Fetcher();
        fetcher.fetch("key");
        PowerMock.verify(File.class);
    }
}

执行单元测试会出现以下错误:

  

验证时出现预期失败:File.createTempFile(,):   预期:1,实际:0

我查看过很多文章,但我无法弄清楚这里缺少什么以及为什么文件没有被嘲笑。请帮助提出任何建议

1 个答案:

答案 0 :(得分:0)

当您模拟Java System类(并且File是Java系统类)时,您必须向@PrepareForTest添加ClassThatCallsTheSystemClass

因此,您需要将class Fetcher添加到@PrepareForTest

@RunWith(PowerMockRunner.class)
@PrepareForTest({Fetcher.class})