网上很难找到的错误解决方法,再有参数的共有方法中调用私有的传参方法时,一致提示找不到Moc看方法。
被Mock的类
public class MockService {
public String publicMethod(String a, String b) {
System.out.println("-----publicMethod------");
return privateMethod(a);
}
private String privateMethod(String a) {
return "privateMethod";
}
}
Mock测试类
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.mockito.Spy;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
/**
* <p> Mock测试类 </p>
*
* @author hongtool
* @date 2023/2/28
*/
@RunWith(PowerMockRunner.class)
// mock私有方法是,需要加上@PrepareForTest,并且要用 @Spy 的方式
@PrepareForTest({MockService.class})
public class MockServiceTest {
@Spy
private MockService mockService = new MockService();
@Test
public void mock() throws Exception {
String a = "1";
String b = "b";
// 注意:由于入参是从上一个层次加工进来的,所以这里需要使用相同的参数 Mockito.eq(a)
PowerMockito.doReturn("re").when(mockService, "privateMethod", Mockito.eq(a));
String s = mockService.publicMethod(a, b);
System.out.println(s);
Assert.assertEquals(s, "re");
}
}
注意:Mockito.eq(a)
入参的参数需要与实际运行时的一致才可以。