闽公网安备 35020302035485号
<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();
}
总结