首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mockito:验证参数是一个使用regex模式的Map

Mockito:验证参数是一个使用regex模式的Map
EN

Stack Overflow用户
提问于 2020-05-06 17:23:21
回答 1查看 623关注 0票数 0

我的职能如下:

代码语言:javascript
复制
mock_object.install_tool name:"Python27x32', type:"CustomTool'

在测试该函数时,我希望验证以下内容:

代码语言:javascript
复制
verify(mock_object, times(1)).install_tool(argThat(hasEntry('name')))
verify(mock_object, times(1)).install_tool(argThat(hasValue('Python\\d{2}x\\d{2}')))

我正在尝试使用matches Matcher,但是失败了,出现了以下错误:

1预期匹配,2次记录

如何通过regex匹配映射值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-06 20:40:49

首先:org.hamcrest.Matchers.hasEntry需要两个参数,只有一个参数的代码无效

代码语言:javascript
复制
hasEntry('name') // no such overload

hasEntry有两个重载:

  • hasEntry(K key, V value)
  • hasEntry(Matcher<? super K> keyMatcher, Matcher<? super V> valueMatcher)

我们希望在键中进行值比较,在值中进行正则表达式。因此,我们使用:

Matchers.is(T value)

  • value:

  • key:
  • Matchers.matchesPattern(java.lang.String regex)
  • Matchers.matchesRegex(java.lang.String regex)

  • key

不幸的是,在Java中,我们需要额外的未经检查的强制转换。请参阅Mockito, argThat, and hasEntry

我们最后得到:

代码语言:javascript
复制
Matcher<String> mapKeyMatcher = Matchers.is("name");
Matcher<String> mapValueMatcher = Matchers.matchesPattern("Python\\d{2}x\\d{2}");

verify(mock_object, times(1)).install_tool(
        (Map<String, String>) argThat(
                hasEntry(mapKeyMatcher, mapValueMatcher)
        )
);

Hamcrest的更新

Mockito提供了它自己的一组匹配器:org.mockito.ArgumentMatchers,但不幸的是它没有地图匹配器。幸运的是,Hamcrest做到了,这就是为什么您首先使用Hamcrest。

要使Hamcrest匹配器适应Mockito匹配器,可以使用argThat(YOUR_HAMCREST_MATCHER)

我们决定使用的地图匹配器具有以下签名:

代码语言:javascript
复制
hasEntry(Matcher<? super K> keyMatcher, Matcher<? super V> valueMatcher)

这两个论点都是Hamcrest的对立面。您不能从Mockito通过regex matcher,您需要使用Hamcrest one。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61641331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档