SpringBoot PowerMockito 私有/静态/方法/属性
在SpringBoot项目中使用PowerMockito进行单元测试时,可以模拟私有方法、静态方法和属性的行为。以下是一个简单的例子:
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.junit.Assert.assertEquals;
@RunWith(PowerMockRunner.class)
@PrepareForTest(YourClass.class) // 指定需要模拟的类
public class YourClassTest {
@Test
public void testPrivateMethod() throws Exception {
// 模拟私有方法的行为
PowerMockito.doAnswer(invocation -> "mockedPrivateMethod").when(YourClass.class, "privateMethod");
// 调用 YourClass 的其他公开方法,这些方法内部会调用模拟过的私有方法
assertEquals("mockedPrivateMethod", new YourClass().publicMethod());
}
@Test
public void testStaticMethod() throws Exception {
// 模拟静态方法的行为
PowerMockito.mockStatic(YourClass.class);
PowerMockito.when(YourClass.staticMethod()).thenReturn("mockedStaticMethod");
// 调用模拟过的静态方法
assertEquals("mockedStaticMethod", YourClass.staticMethod());
}
@Test
public void testReadField() throws Exception {
// 模拟属性的读取行为
PowerMockito.field(YourClass.class, "field").set(new YourClass(), "mockedField");
// 调用 YourClass 的方法来验证属性是否被正确模拟读取
assertEquals("mockedField", new YourClass().getField());
}
}
class YourClass {
private String field = "originalField";
public String publicMethod() {
return privateMethod();
}
private String privateMethod() {
return field;
}
public static String staticMethod() {
return "originalStaticMethod";
}
public String getField() {
return field;
}
}
在这个例子中,YourClass
有一个私有方法 privateMethod()
,一个静态方法 staticMethod()
,以及一个字段 field
。在单元测试中,我们使用 PowerMockito 来模拟这些方法和属性的行为。注意,使用 PowerMockito 时需要添加 @PrepareForTest
注解来指定需要模拟的类,并且要使用 PowerMock 的运行器 PowerMockRunner
。
评论已关闭