当前位置: 首页 > 面试题库 >

在同一模拟上使用多个ArgumentMatchers

梁丘高朗
2023-03-14
问题内容

我正在尝试在Mock上使用Mockito来执行此操作:
当使用parameter1 调用Mock.someMethod(..)->返回result1
当使用parameter2调用Mock.someMethod(..)时-> return result2
当Mock.someMethod (..)用参数3调用->返回result3

    when(mock.method(Matchers.argThat(new MyMatcher1() {

        @Override
        public boolean matches(Object arg0) {
                   // comparision logic
        }
    }))).thenReturn(result1);

    when(mock.method(Matchers.argThat(new MyMatcher2() {

        @Override
        public boolean matches(Object arg0) {
                   // comparision logic
        }
    }))).thenReturn(result2);

    when(mock.method(Matchers.argThat(new MyMatcher3() {

        @Override
        public boolean matches(Object arg0) {
                   // comparision logic
        }
    }))).thenReturn(result3);

但是Mockito正确地对第一个进行了存根,但是在第二个上,它由于某些原因尝试以null增值来运行Matcher而引发NullPointer异常。我不确定是否支持。

如果这不是正确的方法,那么如何使用Mockito实现此目的?谢谢。


问题答案:

通过在自定义ArgumentMatcher中进行空检查,我现在能够解决该问题。它起作用了,因为NPE仅在启动期间当Mockito调用when()语句时才起作用。此时甚至不应该调用ArgumentMatcher.matches()!感觉就像是Mockito中的错误。



 类似资料:
  • 我目前正在为一个groovy应用程序编写单元testcase 有人能告诉我这是不是嘲弄斯波克的两个电话的正确方法?如果没有,那么请引导我走向正确的解决方案。

  • 问题内容: 背景 我想在Jenkins上的不同模拟器上运行我的Android Instrumented测试。假设我有100个测试和4个仿真器,我想在每个仿真器上运行25个测试。 我在Jenkins Pipeline的并行处理中为4个模拟器执行 会产生其他命令,以便为运行已测试的测试设置环境。 当环境准备就绪时,它将执行,这将开始在模拟器上运行测试。 我不想对所有并行调用都运行这些过程(在这种情况下

  • 是否有可能在spring boot中使用嵌入式tomcat配置多个webapps,其方式如下: null

  • 问题内容: 我要测试的Java类(称为)具有以下功能: (有一种方法可以检查条件并调用A或B)。 如何将每个服务的模拟注入适当的变量? 我的Junit拥有以下功能: 但是,当我运行测试以检查在正确条件下调用的服务A / B时,由于没有注入模拟,我得到了空指针。 显然是由于对同一接口()有多个依赖关系。声明模拟服务时,是否可以指定限定词?还是我需要为依赖项设置setter并设置老式方式? 问题答案:

  • 我要测试的Java类(称为)具有以下内容: (有一个方法,它将检查条件并调用a或B)。 显然,这是因为同一个接口()上存在多个依赖关系。在声明模拟服务时,有没有一种方法可以指定限定符?或者我需要为依赖项设置设置器并设置老式的方式吗?

  • 我有一个,有两个Test和,使用原始bean,而使用mockedBean:所以总是有一个测试失败。有没有办法只模拟我的bean为