1.导入包
<!-- https://mvnrepository.com/artifact/org.powermock/powermock-api-mockito --> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito2</artifactId> <version>1.7.4</version> <scope>test</scope> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-core</artifactId> <version>1.7.4</version> <scope>test</scope> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-testng</artifactId> <version>1.7.4</version> <scope>test</scope> </dependency>
2.指定要mock的类
@PrepareForTest({A.class,B.class})
3. 当前的测试类扩展PowerMockTestCase
@PrepareForTest({A.class,B.class}) public class SomeClassTest extends PowerMockTestCase { // 1.该测试类中的实例方法将使用 // org.powermock.core.classloader.MockClassLoader@xxx作为其classLoader // 2.static方法使用的是AppClassLoader @Test public void testXXX(){ } }
4.使用whenNew指定当生成新的实例的返回值
ClassA classA = mock(ClassA.class); whenNew(ClassA.class).withAnyArguments().thenReturn(classA);
5.注
如果在该测试类的static方法中初始化其他类的静态变量,那么在实例方法中调用时,将会抛NullpointerException: 因为classLoader的问题,在静态类中使用的是APPClassLoader,而在实例方法中使用的是MockClassLoader@xxx