首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powermockito:截取所有静态方法

Powermockito:截取所有静态方法
EN

Stack Overflow用户
提问于 2014-08-29 14:38:15
回答 2查看 585关注 0票数 0

此代码模拟类中的静态void方法并覆盖其行为。(摘自此问题here)

代码语言:javascript
复制
@RunWith(PowerMockRunner.class)
@PrepareForTest({Resource.class})
public class MockingTest{

    @Test
    public void shouldMockVoidStaticMethod() throws Exception {
        PowerMockito.spy(Resource.class);
        PowerMockito.doNothing().when(Resource.class, "readResources", Mockito.any(String.class));

        //no exception heeeeere!
        Resource.readResources("whatever");

        PowerMockito.verifyStatic();
        Resource.readResources("whatever");
    }
}

class Resource {
    public static void readResources(String someArgument) {
        throw new UnsupportedOperationException("meh!");
    }
    public static void read(String someArgument) {
        throw new UnsupportedOperationException("meh!");
    }
}

如何拦截所有方法调用,而不是单独指定方法?

它尝试了PowerMockito.doNothing().when(Resource.class)PowerMockito.doNothing().when(Resource.class, Matchers.anything()),但这些都不起作用。

EN

回答 2

Stack Overflow用户

发布于 2014-08-29 14:51:58

这一点:

代码语言:javascript
复制
PowerMockito.doNothing().when(Resource.class, Matchers.anything())

不起作用,因为Matchers.anything()Object创建了一个匹配器,而上面的when()正在尝试根据类型查找方法。尝试传递Matchers.any(String.class)。这只适用于具有相同参数列表的静态方法。不确定是否有更通用的覆盖方法。

票数 0
EN

Stack Overflow用户

发布于 2014-08-29 15:35:50

如果你想模拟一个类的所有静态方法,我认为你可以用PowerMockito.mockStatic(..)代替PowerMockito.spy(..)

代码语言:javascript
复制
   @Test
   public void shouldMockVoidStaticMethod() throws Exception {
      PowerMockito.mockStatic(Resource.class);

      //no exception heeeeere!
      Resource.readResources("whatever");

      PowerMockito.verifyStatic();
      Resource.readResources("whatever");
   }

希望能对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25562865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档