首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用PowerMock和TestNG模拟单个静态方法

使用PowerMock和TestNG模拟单个静态方法
EN

Stack Overflow用户
提问于 2013-12-05 10:56:39
回答 2查看 11.7K关注 0票数 5
代码语言:javascript
运行
复制
class StaticClass {
  public static String a(){ return "a"; }
  public static String ab(){ return a()+"b"; }
}

我想模拟StaticClass::a,以便它返回"x",对StaticClass.ab()的调用在"xb"中产生.

我觉得在PowerMock和TestNG里很难.

我现在测试的确切代码是:

代码语言:javascript
运行
复制
class StaticClass {
    public static String A() {
        System.out.println("Called A");
        throw new IllegalStateException("SHOULD BE MOCKED AWAY!");
    }

    public static String B() {
        System.out.println("Called B");
        return A() + "B";
    }
}

@PrepareForTest({StaticClass.class})
public class StaticClassTest extends PowerMockTestCase {

    @Test
    public void testAB() throws Exception {
        PowerMockito.spy(StaticClass.class);
        BDDMockito.given(StaticClass.A()).willReturn("A");
        assertEquals("AB", StaticClass.B()); // IllegalStateEx is still thrown :-/
    }

}

我有Maven依赖关系:

代码语言:javascript
运行
复制
<artifactId>powermock-module-testng</artifactId>
and
<artifactId>powermock-api-mockito</artifactId>
EN

回答 2

Stack Overflow用户

发布于 2015-05-26 07:55:20

为什么不试试这样的方法:

代码语言:javascript
运行
复制
PowerMockito.mockStatic(StaticClass.class);
Mockito.when(StaticClass.a()).thenReturn("x");
Mockito.when(StaticClass.ab()).thenCallRealMethod();
票数 10
EN

Stack Overflow用户

发布于 2013-12-05 14:16:31

我认为这可以通过部分伪装来完成。

代码语言:javascript
运行
复制
PowerMock.mockStaticPartial(Mocked.class, "methodToBeMocked");

这可能会有帮助:http://avricot.com/blog/index.php?post/2011/01/25/powermock-%3A-mocking-a-private-static-method-on-a-class

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

https://stackoverflow.com/questions/20398120

复制
相关文章

相似问题

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