2013-02-11 109 views
0

我想测试一些严重依赖静态方法调用的遗留代码。PowerMockito测试遗留代码

基本上,我有一个类A,方法b()和c()。 A.b()返回void,并且A.c()返回一个值。

如果真正的A.b()被调用,被测试的类会抛出一个异常,所以我需要它不做任何事情。但是,如果我使用:

PowerMockito.spy(A.class); 
    PowerMockito.doNothing().when(A.class); 

然后我不能模拟A.c()返回我需要的值。这是因为该行

PowerMockito.when(A.c()).thenReturn(value); 

抛出异常:Only void methods can doNothing()。有什么办法让A.b()什么也不做,并且“覆盖”A.c()返回正确的值?

回答

0

我认为您在when()之后错过了方法调用。

为PowerMockito API的尝试PowerMockito.doNothing().when(A.class); A.b();

+0

PowerMockito.doNothing()。当(A.class)有void返回类型 – user472875 2013-02-11 17:05:13

1

我发现了一个变通修复该问题:

嘲笑AC(),用途:

PowerMockito.mockStatic(A.class); 
PowerMockito.when(A.c()).thenReturn(value); 

然后,就什么也不做A.b(),加上行:

PowerMockito.suppress(PowerMockito.method(A.class, "b")); 

我觉得很肮脏。 (A.class)有void返回类型

+0

当(A.class,“b”));'也没有'PowerMockito.doNothing()。 – 2013-02-11 17:29:03