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

Mockito doAnswer 抛出 InvalidUseOfMatchersException for 未知原因

梁丘诚
2023-03-14

我想模拟我的 PermissionHostCompat 类的 action requestPermission(@NonNull String permission, int requestCode)。

public class PermissionHostCompat {

    (...)

    public void requestPermission(@NonNull String permission, int requestCode) {
        requestPermissions(new String[]{permission}, requestCode);
    }

    public void requestPermissions(@NonNull String[] permissions, int requestCode) {
        if (activity != null) {
            ActivityCompat.requestPermissions(activity, permissions, requestCode);
        } else if (fragment != null) {
            FragmentCompat.requestPermissions(fragment, permissions, requestCode);
        } else {
            fragmentv4.requestPermissions(permissions, requestCode);
        }
    }

    (...)
}

我是这样做的:

@Mock
PermissionHostCompat permissionHostCompat;

//...

Answer<Void> requestPermissionAction = new Answer<Void>() {
        public Void answer(InvocationOnMock invocation) {
            // some code
            return null;
        }
    };
doAnswer(requestPermissionAction).when(permissionHostCompat)
    .requestPermission(anyString(), anyInt());

它给我抛出了错误:

org . mock ITO . exceptions . misusing . invaliduseofmatchersexception:< br >参数匹配器的使用无效!< br >预期有0个匹配者,记录了2个:

如果匹配器与原始值组合,则可能会出现此异常:/
/不正确:
someMethod(anyObject(),“raw String”);使用匹配器
时,所有参数都必须由匹配器提供。
例如: /
/correct:
someMethod(anyObject(), eq(“String by matcher”));

我不知道为什么。我还尝试了任何(字符串.class)任何(int.class)和所有选项之间的组合。

我的导入:

导入静态org.mockito.Matchers。任何
导入静态org.mockito.Matchers。任意Int
导入静态org.mockito.Matchers。任意字符串
导入staticorg.mockito.mockito。doAnswer
导入静态org.mockito.mockito.when;

莫米托版本:1.10.19

我做错了什么?

共有1个答案

梅飞龙
2023-03-14

试试看它是否能与Mockito 2一起使用。但进口应该改变:

import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Matchers.anyString;
 类似资料:
  • 问题内容: 我使用的是C ++ OpenCL包装程序,我想知道为什么我的程序崩溃了。我发现对的任何调用均引发错误。 程序输出: 这是的输出: –libdir=/usr/lib –libexecdir=/usr/lib –mandir=/usr/share/man –infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ –

  • 我正在编写一个名为ZAP的Java应用程序的扩展。该扩展是一个fat/uber jar,内联了Equinox包()。另外的bundle也包含在这个jar中,在bundles的子目录中。正如《如何嵌入OSGi》中所述,正在启动OSGi框架。 我正试图让Felix GoGo shell按照Eclipse“控制台外壳”文档中概述的步骤工作。它指定了以下所需的捆绑包: 除了Equinox/。由于Equin

  • 我如何解决这个问题?

  • 问题内容: 给这个: [未检查]未检查的方法调用:java.lang.Enum中的valueOf(java.lang.Class,java.lang.String)应用于(java.lang.Class,java.lang.String) 我不想使用泛型,因为这是一个重大更改。我不想压抑。我不明白为什么会发生此警告。我想这是因为无法扩展Enum类型。我明白了。但是我不明白为什么通配符类会抛出这个奇

  • 问题内容: 在Grails中,我可以在 BootStrap的 内存dataSource中创建到H2的域对象,并使结果恢复正常,但是一旦应用启动(例如,从GSP或控制器查询),然后尝试运行查询,我得到以下信息: 我已经清理了构建 运行Grails 2.0.0 我有多个SQL Server DB的数据源,这些数据源仅对StoredProcedures进行了调用,现在发现了一个用例,它使用良好的旧Dom

  • 我正在使用RabbitMQ的spring cloud stream。我试图通过在运行时删除队列并将消息发送到删除的队列来进行否定测试。 我正在侦听来自队列1的消息,并将消息发送到队列2(已删除的一个)。我原以为上面的代码会抛出异常,但事实并非如此。甚至从队列1读取的消息也已被确认。我在队列1和队列2上有一个死信队列,但消息没有进入DLQ。