<dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <version>2.0.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito2</artifactId> <version>2.0.0</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency>2. idea 添加testme插件
@RunWith(PowerMockRunner.class) @PrepareForTest(YourClass.class) public class YourTestClass { // 测试代码 }1.Mock 私有变量
@Test public void testPrivateField() { YourClass yourClass = new YourClass(); // 堆代码 duidaima.com Whitebox.setInternalState(yourClass, "privateField", "mocked value"); assertEquals("mocked value", Whitebox.getInternalState(yourClass, "privateField")); }2. 模拟静态方法
@Test public void testStaticMethod() { PowerMockito.mockStatic(YourStaticClass.class); PowerMockito.when(YourStaticClass.staticMethod()).thenReturn("mocked result"); String result = YourStaticClass.staticMethod(); assertEquals("mocked result", result); }3. 模拟私有方法
@Test public void testPrivateMethod() throws Exception { YourClass yourClass = PowerMockito.spy(yourClass); PowerMockito.doReturn("mocked result").when(yourClass, "privateMethod"); assertEquals("mocked result", Whitebox.invokeMethod(yourClass, "privateMethod")); }4. 模拟构造函数
@Test public void testConstructor() throws Exception { YourClass yourObject = PowerMockito.spy(new YourClass()); PowerMockito.whenNew(YourClass.class).withNoArguments().thenReturn(yourObject); YourClass createdObject = PowerMockito.mock(YourClass.class); assertNotNull(createdObject); }5. Mock Final类
@Test public void testFinalClass() { FinalClass finalClass = PowerMockito.mock(FinalClass.class); PowerMockito.when(finalClass.finalMethod()).thenReturn("mocked result"); assertEquals("mocked result", finalClass.finalMethod()); }6. 模拟 final 方法
@Test public void testFinalMethod() { YourFinalClass yourObject = PowerMockito.spy(new YourFinalClass()); PowerMockito.doReturn("mocked result").when(yourObject).finalMethod(); String result = yourObject.finalMethod(); assertEquals("mocked result", result); }7. 参数匹配器
@Test public void testMethodWithMatcher() { YourClass yourObject = PowerMockito.spy(new YourClass()); PowerMockito.when(yourObject.methodWithParameter(anyString())).thenReturn("matched"); String result = yourObject.methodWithParameter("some parameter"); assertEquals("matched", result); }8. Mock void返回值的函数
@Test public void testVoidMethod() { YourClass yourClass = PowerMockito.spy(yourClass); PowerMockito.doNothing().when(yourClass, "voidMethod"); yourClass.voidMethod(); // 验证副作用或其他逻辑 }验证
@Test public void testMethodVerification() { YourClass yourObject = PowerMockito.spy(new YourClass()); yourObject.methodThatCallsStatic(); PowerMockito.verifyStatic(); YourStaticClass.staticMethod(); verify(yourObject).methodThatCallsStatic(); }总结