美文网首页
mockito doReturn精确匹配对象实例

mockito doReturn精确匹配对象实例

作者: 鹅鹅鹅_ | 来源:发表于2019-04-08 09:38 被阅读0次

在mockito中我们mock某个对象的行为时,可以使用doReturn when句法

# 当list调用get方法并且参数是任意Int时返回mockedList
doReturn(mockedList).when(list).get(anyInt());    
# 当list调用get方法并且参数是1时返回mockedList2
doReturn(mockedList2).when(list).get(1);

被mock对象的行为默认参数只提供了anyInt(),anyString(),anyChar()等基础类型对象,当然我们也可以直接提供基础类型变量比如1,2,3,"string"等来进行精确行为定制。
但如果我们想mock的对象的行为参数类型是自定义类型,比如

public class A {
  private int id;
  private String name;

  public A(int id, String name) {
    this.id = id;
    this.name = name;
  }
}
A a = new A(1, "Anni");
doReturn(mockedList).when(list).get(a);    

我的原意是想list调用get时并且get参数是A类型,并且id为1,name为Anni的时候才会返回mockedList。但是这里的参数实例是新new的a,list实际调用的时候即使传入的是A的实例,并且id和name与a相同,但依然是两个不同的实例对象,对象地址不同,所以他们即使内容相同也不会匹配,想让他们匹配,必须重写equals方法。但是,我们又不能仅仅为了测试而修改类的equals方法......

此时,我们可以通过实现ArgumentMatcher接口来完成目标:

public class AArgMatcher implements ArgumentMatcher<A> {
  private A a;
  public AArgMatcher(A a) {
    this.a = a;
  }
  @Override
  public boolean matches(A a) {
      return (this.a.id == a.id && this.a.name.equals(a.name));
  }
}

如下使用就可以精确匹配id为1,name为Anni的对象了。

A a = new A(1, "Anni");
doReturn(mockedList).when(list).get(argThat(new AArgMatcher()));    

相关文章

  • mockito doReturn精确匹配对象实例

    在mockito中我们mock某个对象的行为时,可以使用doReturn when句法 被mock对象的行为默认参...

  • Jest前端测试入门

    使用匹配器 精确匹配toBe匹配使用===全等匹配 如果需要检查对象或者数组需要使用toEqual 真值匹配 to...

  • nginx的location匹配

    location匹配分三种方式,按优先级顺序是精确匹配(=)、普通匹配、正则匹配(~,^~,~*). 精确匹配命中...

  • django基础 --- models过滤条件

    filter,精确匹配,= exclude,取反!= __exact,精确匹配 like "xxx" __iexa...

  • Mockito初级学习

    标签:mockito 使用Mockito来Mock对象 有两种方法来mock对象,1)使用静态方法: mock()...

  • Nginx location匹配规则

    location [=|~|~*|^~|@] pattern { ... } 匹配顺序 精确匹配 = 前缀匹配 ^...

  • 计算机二级Excel常考函数

    查询函数VLOOKUP(引子,引子所在范围,第几列,精确匹配)求和函数SUM(求和对象)SUMIF(条件范围,条件...

  • C/C++学习笔记汇总

    ^函数重载的匹配: 当函数名被重载后,函数的匹配过程:首先寻找能精确匹配的函数,如果未能精确匹配,则尝试...

  • shell15

    grep 参数-w 精确匹配-Fx 完全匹配

  • powermock series 1

    PowerMock-and-Mockito-Learning 使用实例 1. 模拟接口返回 InterfaceTo...

网友评论

      本文标题:mockito doReturn精确匹配对象实例

      本文链接:https://www.haomeiwen.com/subject/kgeeiqtx.html