java使用powermock修改字节码,对函数进行打桩。

//@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");
```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值