单单用来自Mockito的@InjectMocks了会报错
还要再套一层PowerMockito的spy
public class World {
private Banana banana = new Banana();
public Banana getBanana() {
return banana;
}
private String secretGreeting(String s){
return "i am secretly saying: " + s;
}
public String getLog(String s){
return secretGreeting(s);
}
}
@PrepareForTest({MyUtil.class, World.class})
@RunWith(PowerMockRunner.class)
public class WordTest2 {
@Mock
private Banana banana;
// 叠中叠
@InjectMocks
private World world;
@Test
public void test1() throws Exception {
// 用的是powermock的spy
// World world = PowerMockito.spy(new World());
world = PowerMockito.spy(world);
// mock私有方法
// 先when再thenReturn也行
PowerMockito.doReturn("11111").when(world, "secretGreeting", "pp");
System.out.println(world.getLog("pp"));
// 自动注入仍然成功
PowerMockito.when(banana.shout(Mockito.anyString())).thenReturn("22222");
System.out.println(world.getBanana().shout("wow"));
}
}