【问题标题】:PowerMock mockStatic not mocking the classPowerMock mockStatic 不模拟类
【发布时间】:2016-03-30 21:51:50
【问题描述】:

我有以下类(和其中的方法)

类提取器{

 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

我浏览了很多文章,但无法弄清楚这里缺少什么以及为什么 File 没有被嘲笑。有什么建议请帮忙

【问题讨论】:

  • 有“PowerMock.expect()”方法吗?如果是这样,您应该改用它。
  • PowerMock 没有任何期望,但据我所知,我们使用的是 EasyMock.expect
  • 有趣。我只使用 PowerMockito,所以我不熟悉这种变化。我知道我们必须使用“PowerMock.when()”来模拟静态方法的行为。
  • 我想知道这是否可能是由于 junit 和 PowerMockEasyMock 版本中的任何冲突
  • Easymock.replayAll();在哪里

标签: java unit-testing powermock easymock


【解决方案1】:

当您模拟 Java 系统类(并且 File 是一个 Java 系统类)时,您必须将 ClassThatCallsTheSystemClass 添加到 @PrepareForTest

所以你需要将class Fetcher添加到@PrepareForTest

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

【讨论】:

    猜你喜欢
    • 2017-01-03
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    相关资源
    最近更新 更多