JMockit 中捕获 mock 对象方法的调用参数

本文介绍如何使用JMockit捕获被Mock方法的调用参数,并通过示例展示在不同场景下如何验证方法调用及其参数。

三个月前写过一篇 Mockito 中捕获 mock 对象方法的调用参数,一般项目中 Mockito 不决求助于 JMockit, 同样的在 JMockit 也需对捕获被 Mock 的方法调用参数。当我们用 new Expectations(){{}} 打桩并在后面断言了返回值,那就无需捕获参数来断言,匹配到了方法调用即证明传入的参数也是对的,如下面的代码所示

public class UserServiceTest {

    @Mocked
    private UserDao userDao;

    @Test
    public void couldCallUserDaoToAddUser() {
        new Expectations(){{
           userDao.findById(123);
           result = "Yanbin";
        }};

        UserService userService = new UserService(userDao);
        String user = userService.findBy(123);

        assertThat(user).isEqualTo("Yanbin");  //这里断言成功也就证明了 userDao.findById(123) 方法被调用,参数必须是 123
    }
}

但如果是未打桩的方法,或打桩是用的模糊参数(withInstanceOf(String.class)), 或是无返回值的方法就要事后对是否调用了某个方法以及传入什么参数的情况进行断言。 阅读全文 >>

转载于:https://my.oschina.net/u/2791/blog/918914

在使用 JMockit 进行单元测试时,可以使用 `@Mocked` 注解来模拟方法内部创建的对象方法调用。当使用 `@Mocked` 注解对一个类进行标注时,JMockit 会自动将该类的所有实例都替换为模拟对象。 以下是一个示例代码,展示了如何使用 JMockit 来模拟方法内部创建对象方法调用: ```java import mockit.Expectations; import mockit.Mocked; public class MyClass { public void myMethod() { // 在方法内部创建对象 MyObject myObject = new MyObject(); String result = myObject.myMethod2(); System.out.println(result); } } public class MyObject { public String myMethod2() { return "Hello World"; } } public class MyClassTest { @Test public void testMyMethod(@Mocked MyObject mockedObject) { // 模拟 myMethod2() 方法的返回值 new Expectations() {{ mockedObject.myMethod2(); result = "Mocked Method"; }}; MyClass myClass = new MyClass(); myClass.myMethod(); // 输出 "Mocked Method" } } ``` 在上述示例中,我们使用 `@Mocked` 注解标注了 `MyObject` 类,表示对该类进行模拟。然后,在测试方法中,使用 `new Expectations()` 块来定义对模拟对象方法调用进行模拟。最后,创建 `MyClass` 的实例并调用 `myMethod()` 方法,可以看到输出的结果是模拟方法调用的返回值。 需要注意的是,当使用 `@Mocked` 注解对类进行模拟时,所有的实例都会被替换为模拟对象,因此需要小心处理其他可能受影响的逻辑。另外,JMockit 还提供了其他的注解和功能来方便地进行单元测试,你可以参考 JMockit 的文档来了解更多用法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值