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

标签 java mocking testng powermock

class StaticClass {
  public static String a(){ return "a"; }
  public static String ab(){ return a()+"b"; }
}

我想模拟 StaticClass::a 以便它返回 "x" 并且调用 StaticClass.ab() 结果“xb”...

我发现在 PowerMock 和 TestNG 中很难......


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

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 依赖项:

<artifactId>powermock-module-testng</artifactId>
and
<artifactId>powermock-api-mockito</artifactId>

最佳答案

为什么不尝试这样的事情:

PowerMockito.mockStatic(StaticClass.class);
Mockito.when(StaticClass.a()).thenReturn("x");
Mockito.when(StaticClass.ab()).thenCallRealMethod();

关于java - 使用 PowerMock 和 TestNG 模拟单个静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20398120/

相关文章:

java - 在 Java 中从 List 路由方法调用的最佳方法

java - 如何为 final类创建动态代理?

c++ - 使用 GMOCK 模拟具有私有(private)构造函数的类

java - 我需要仔细检查 UT 中的流量吗?

java - 我在 xml 文件中传递参数,但系统仍将其值设为 param-val-not-found

java - 如何确定哪个测试挂起?

java - 无法在 testng 套件中的 <test> 标签之间传递数据

java - struts 2基础应用了解

java - Hamcrest 比较系列

java - 点击推送通知后新 Activity 未打开