ArgumentMatcher详解

本文介绍了如何在Mockito中使用ArgumentMatcher和参数匹配函数来模拟方法调用,只接受特定参数。通过List示例展示了如何创建自定义参数匹配器并验证方法行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作用:

匹配传入的参数,看其是否符合一定的条件


背景:

  • Mockito有构造参数的功能
  • 构造的参数需使用参数匹配函数
  • 参数匹配函数有时需使用参数匹配器
  • ArgumentMatcher就是一种参数匹配器

使用方法:

  • 构造mock对象
  • mock对象存入方法的返回值
  • 方法的输入参数使用参数匹配函数来构造
  • 参数匹配函数中的参数匹配器可以自定义

效果:

  • 符合条件的对象,会被存入方法采纳
  • 不符合条件的对象,不会被存入方法采纳

实现:

public class AppTest {
    @Test
    void testArgumentMatchers2() {
        List mockedList = mock(List.class);

        // 存入方法:addAll
        // 参数匹配函数:argThat
        // 参数匹配器:ListOfTwoElements
        when(mockedList.addAll(argThat(new ListOfTwoElements()))).thenReturn(true);
        // 符合条件的对象,会被存入方法采纳
        boolean myResult = mockedList.addAll(Arrays.asList("one", "two"));
        System.out.println("add two element:" + myResult);
        // 不符合条件的对象,不会被存入方法采纳
        boolean myResult2 = mockedList.addAll(Arrays.asList("one", "two", "three"));
        System.out.println("add three element:" + myResult2);

        verify(mockedList).addAll(argThat(new ListOfTwoElements()));
    }

}

class ListOfTwoElements implements ArgumentMatcher<List> {
    public boolean matches(List list) {
        return list.size() == 2;
    }
    public String toString() {
        //printed in verification errors
        return "[list of 2 elements]";
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值