2.7 灵活的参数匹配

作者: 孙兴斌 | 来源:发表于2016-12-27 17:35 被阅读28次

在record和verify阶段进行方法匹配时,

  • 对于原始类型对象,数值相同即可;
  • 对于Object的子类,需要equals()返回true;
  • 对于数组,需要长度相等且每个对象equals()返回true;

除此之外,如果不关心replay时的具体参数,可以使用anyXyz或者withXyz(...)方法。

使用"any"

@Test
public void someTestMethod(@Mocked final DependencyAbc abc)
{
   final DataItem item = new DataItem(...);

   new Expectations() {{
      abc.voidMethod(anyString, (List<?>) any);
   }};

   new UnitUnderTest().doSomething(item);

   new Verifications() {{
      abc.anotherVoidMethod(anyLong);
   }};
}
  • 任何的基本类型都有对应的anyXyzanyString对应任意字符串。
  • any对应任意的对象,在使用时需要进行显式类型转换: (CastClass) any
  • mockit.Invocations类中有可以使用所有anyXyz
  • 使用时参数位置需要一致

使用"with"

any的限制太宽松,with可以选择特定的子集。

@Test
public void someTestMethod(@Mocked final DependencyAbc abc) {
   final DataItem item = new DataItem(...);

   new Expectations() {{
      abc.voidMethod("str", (List<?>) withNotNull());
      abc.stringReturningMethod(withSameInstance(item), withSubstring("xyz"));
   }};

   new UnitUnderTest().doSomething(item);

   new Verifications() {{
      abc.anotherVoidMethod(withAny(1L));
   }};
}

也可以自定义with方法。

使用"null"

null可以与任何对象匹配,好处是避免类型转换,但是需要有一个any或者with

@Test
public void TestMethod(@Mocked final Dependency mock) {
    new StrictExpectations() {{
    
        //测试会失败,因为没有any或者with
        mock.mockMethod(2,  null);
        
        //测试通过
        mock.mockMethod(anyInt,  null);
    }};
    mock.mockMethod(new Integer(2), "hello world");
}

如何需要的是null,则应该用 withNull() 方法。

varargs

要么使用常规的参数,要么使用any/with,不能混合使用。

相关文章

  • 2.7 灵活的参数匹配

    在record和verify阶段进行方法匹配时, 对于原始类型对象,数值相同即可;对于Object的子类,需要eq...

  • shell15

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

  • Linux 命令之grep

    案例1:精准匹配(-w) 注: 可以看出来,加-w参数会精准匹配要匹配的单词,并且是区分呢大小写匹配。其中 参数-...

  • 微信小程序云开发db.RegExp

    options 参数说明 参数说明i大小写不敏感m跨行匹配;让开始匹配符 ^ 或结束匹配符 $ 时除了匹配字符串的...

  • 灵活用工丨员工就业的一种新模式

    灵活用工是一种就业方式,但也不是个人直接跟企业去匹配,而是个人通过灵活用工平台和企业进行匹配。 灵活用工平台对于企...

  • Spark-2.3安装配置

    下载安装 官网下载 解压即可 环境变量配置 启动 匹配的环境 hadoop2.7匹配scala-2.11.*

  • 【Python进阶】2.7最短匹配模式 非贪婪

    2.7 最短匹配模式 问题 你正在试着用正则表达式匹配某个文本模式,但是它找到的是模式的最长可能匹配。而你想修改它...

  • linux命令find命令(文件搜索命令,必学)

    find 寻找路径 [参数] 寻找条件参数详解:-name 匹配名称根据文件修改的时间匹配-mtime -n...

  • Mockito的参数匹配

    上篇我们已经说过,mockito中可以控制mock对象的方法,返回我们想要的值,而无需真正执行它。使用方法是doR...

  • Mock方法时的参数匹配

      在mock方法时,对于方法的参数匹配是有要求的,只有要执行的方法的参数匹配mock方法里面的参数时,该mock...

网友评论

    本文标题:2.7 灵活的参数匹配

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