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>发布于 2015-05-26 07:55:20
为什么不试试这样的方法:
PowerMockito.mockStatic(StaticClass.class);
Mockito.when(StaticClass.a()).thenReturn("x");
Mockito.when(StaticClass.ab()).thenCallRealMethod();发布于 2013-12-05 14:16:31
我认为这可以通过部分伪装来完成。
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
https://stackoverflow.com/questions/20398120
复制相似问题