当前位置: 首页 > 知识库问答 >
问题:

org.mockito.exceptions.misusing.invaliduseofmatchersexception错误的参数匹配器

红朝
2023-03-14

我得到以下异常

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Misplaced argument matcher detected here:

You cannot use argument matchers outside of verification or stubbing.
Examples of correct usage of argument matchers:
    when(mock.get(anyInt())).thenReturn(null);
    doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject());
    verify(mock).someMethod(contains("foo"))
@Mock    
Template templateParser = new TemplateParser();
when(templateParser.getLayoutIdsFromTemplate(any(HashMap.class)))
                           .thenReturn(Arrays.asList("id1", "id2"));
public class TemplateParser {
    public List<String> getLayoutIdsFromTemplate(HashMap<String, Object> parsedTemplate)
    {
        List<String> listOfLayoutIds = new ArrayList<String>();

        //Loading listOfLayoutIds here

        return listOfLayoutIds;
    }
}

共有1个答案

汪胡非
2023-03-14

您的模拟方法GetLayoutidsFromTemplate接收的是类型化的HashMap object>参数,而不是简单的HashMap。这是invaliduseofmatchersexception的原因。

如果您可以做一点重构,您可以通过以下操作来解决问题:

1)将方法更改为接收map 而不是hashmap :

   public List<String> getLayoutIdsFromTemplate(Map<String, Object> parsedTemplate) {
      ...
   }

2)在测试类中,使用mockito.anymapof(String.class,Object.class))而不是mockito.any(HashMap.class))匹配参数:

when(templateParser.getLayoutIdsFromTemplate(anyMapOf(String.class, Object.class))).thenReturn(Arrays.asList("id1", "id1"));

希望有帮助。

 类似资料:
  • 这是我运行程序时收到的错误: 注:[19533]是我使用的一个测试值。 这是在CustomerServiceBeanImpl.java中出现错误的方法: 在快速检查ERD时,“Customer”表中的“id”列的数据类型为bigint。然而,我不确定这是否重要。(顺便提一下PostgreSQL数据库。) 如何修复此错误?

  • 我正在研究Laravel 4和Postgreql。我试图存储一个数组在Postgreql数组字段。这是我的表声明: 我试着用雄辩插入一行: 我得到这个错误: 此错误来自供应商/laravel/框架/src/照明/支持/helpers.php:990。 我读过这个问题,为什么在Laravel中提交帖子表单时会出现preg_replace()错误?尝试保存数组时会发生此错误。 但我确实想在我的Post

  • 我试图使用Mockito来模拟一个方法,但是,我不断地出错。我试图用spring注释设置Mockito @RunTo(MockitoJUnitRunner.class)类CPEServiceInvokerInimplNewTest{ 然后我用这个Mockito调用- 尝试并模仿这种方法- 我得到了这个错误- 如果匹配器与原始值组合,则可能会发生此异常://不正确:somethod(anyObjec

  • 在setUp()方法下一行中: 以下是错误: org.mockito.exceptions.misusing.invaliduseofmatchersexception:在此处检测到错误放置或错误使用的参数匹配器: ->在com.auditService.test.auditServiceClientTest.setup(auditServiceClientTest.java:72) when(m

  • 问题内容: 我需要为某些数据集创建一个匹配查找器系统,如下所示: 有一组对象,每个对象都由一个字符串标识。 每个对象正好具有N个属性P i。每个属性值都是一个字符串。 N = 3的数据库示例(在现实生活中,N = 8)。 系统必须返回s 集,匹配对象属性上的给定查询。在查询中,用户必须指定所有属性值。或者,对于查询中的某些或所有属性,用户可以指定“通配符” ,这意味着任何属性值都将与条件匹配。 查

  • 在BundleProcessorTest.java中的以下两个测试用例中,我的第一个测试用例成功地通过了异常。 org.mockito.exceptions.misusing.invaliduseofmatchersexception:在此处检测到错误的参数匹配器: ->在bundle.test.bundleProcessorTest.bundlePluginShouldNotBenull(Bun