【发布时间】:2013-12-05 10:56:39
【问题描述】:
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>
【问题讨论】:
-
你有没有尝试像PowerMock documentation描述的那样做?
-
@sigito 是的!我将更新示例以向您展示我需要模拟的代码
-
你一定是丢失了
mockStatic方法调用。 -
@sigito 看,我不想模拟整个类,而只是一个静态方法...
标签: java mocking testng powermock