在进行mock操作之前 在类上需要添加相应注解
@RunWith(PowerMockRunner.class) 这个注解是必须的
@PowerMockIgnore({ “javax.script.", "javax.management.” })不要求一定添加 可以忽略一些控制台报出的错误。
一般控制台出现如下错误可以使用
ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider jdk.nashorn.api.scripting.NashornScriptEngineFactory not a subtype
2022-10-05 16:01:01,987 main ERROR Could not reconfigure JMX java.lang.LinkageError: loader constraint violation: loader (instance of org/powermock/core/classloader/javassist/JavassistMockClassLoader) previously initiated loading for a different type with name "javax/management/MBeanServer"
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
...
@RunWith(PowerMockRunner.class)
@PowerMockIgnore({
"javax.script.*", "javax.management.*" })
public class WANestedExceptionTest
@RunWith(PowerMockRunner.class)
@PrepareForTest({
DBeanHandler.class })
public class DBeanHandlerTest
@PrepareForTest({ DBeanHandler.class }) 这个注解是根据你需要mock那些类进行添加
我个人是项目工程中自己写的类都在这个注解里添加,jar包里的类是直接通过@Mock,不在上面写
添加mock对象
注解
@Mock
private PrintWriter output;
@Mock
private HttpServletResponse res;
方法里直接写入
public void test001(){
//普通方法引入对应类
User user = mock(User.class);
//普通方法使用
when(user.getWriter()).thenReturn("user1");
//静态方法引入对应类
mockStatic(Account.class);
//使用
when(Account.getCampaign()).thenReturn(null);
}
构造方法
@Mock
private InitialContext incont;
//方法里
whenNew(InitialContext.class).withArguments(null).thenReturn(incont);
mock对象的构造方法时,在@PrepareForTest中添加使用该方法的类,而不是本类
@PrepareForTest({
DBeanHandler.class })
私有方法
//方法1
@Test
public void test002() throws Exception {
DBeanHandler db = spy(new DBeanHandler());
String str = "";
doReturn(str).when(db, "getRbString", Mockito.anyString());
db.getDataSource();
}
//方法2 AAFukenImple 需在类前的注解里添加
MemberModifier.stub(MemberMatcher.