1. 对静态方法的mock
代码如下:
@RunWith(PowerMockRunner.class)
@PrepareForTest({HPPrinter.class})
public class StationerTest {
@Mock
private Payee payee;
@InjectMocks
private Stationer stationer;
@Test
public void testPrintSuccess(){
PowerMockito.mockStatic(HPPrinter.class);
when(HPPrinter.getOut()).thenReturn(System.out);
stationer.print("I am testing powermock");
verify(payee).collect();
}
}
/**
* A stationer is a person who sells paper, envelopes, pens, and other equipment used for writing
*/
public class Stationer {
private Payee payee;
public Stationer() {
}
public Stationer(Payee payee) {
this.payee = payee;
}
public void print(String content){
HPPrinter.getOut().print(content);
payee.collect();
}
}
public class Payee {
public void collect() {
System.out.println("Money received");
}
}
public class HPPrinter {
private static PrintStream out = null;
public static void setOut(PrintStream out) {
HPPrinter.out = out;
}
public static PrintStream getOut() {
return out;
}
}
pom.xml
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.10.19</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.7.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.7.4</version>
<scope>test</scope>
</dependency>
Tips: 当powermock-module-junit4,powermock-api-mockito采用版本1.6.1时,运行测试会报错:
Exception in thread "main" java.lang.IllegalAccessError: tried to access class org.mockito.internal.creation.cglib.CGLIBHacker from class org.mockito.internal.creation.MethodInterceptorFilter
将版本修改成1.7.4后,运行成功。