//@PrepareForTest({X2Client.class, TestManager.class,HttpClient.class})//要被打桩的类一定要在prepare*中声明
我的demo如下:
class Callee {
public String say(){return "not replaced";
}
}
class Caller {
private Callee callee = new Callee();
public String say() {
return callee.say();
}
}
@RunWith(PowerMockRunner.class)
public class TestCaller {
public static void sayStub(){
System.out.println("replaced");
}
@Test
@PrepareForTest(Callee.class)
public void testCaller(){
Caller caller = new Caller();
System.out.println(caller.say());
MemberModifier.stub(MemberMatcher.method(Callee.class, "say")).toReturn("replaced");
//Caller caller = new Caller();
System.out.println(caller.say());
}
}
运行结果:
not replaced
replaced
参考文章如下:
要模拟的类:
```
public class PrivateObject {
private String privateString;
public PrivateObject(String privateString) {
this.privateString = privateString;
}
private String getPrivateString() {
return this.privateString;
}
}
```
使用PowerMock模拟:
```
// 类实例(class instance)
PrivateObject instance = new PrivateObject ();
// 模拟私有字段/变量(private field/variable)
MemberModifier
.field(PrivateObject .class, "privateString").set(
instance , "hellomock");
// 模拟私有方法(private method)
MemberModifier
.stub(MemberMatcher.method(PrivateObject .class,
"getPrivateString"))
.toReturn(
"Power Mock");
```