【问题标题】:Mockito Matcher parameters showing as undefinedMockito Matcher 参数显示为未定义
【发布时间】:2014-06-20 15:43:31
【问题描述】:

我正在尝试模拟包含在应用程序的 Main 类中的方法。我想测试一下,当所有参数都提交成功后,应用程序会调用正确的方法uploadFiles。 when - thenReturn 对如下所示:

NrClient nrClient = (NrClient)Mockito.mock(NrClient.class);
Mockito.when(nrClient.uploadFiles("DF49ACBC8", anyList(), "dl")).thenReturn("");

这显示为运行时异常:“MainTest 类型的方法 anyString() 未定义。” 我有进口商品:

import org.mockito.Mockito;
import org.mockito.Matchers;

那么为什么这个方法是未定义的呢?我的实现有问题吗?

我也尝试过 anyString() 和 anyInt(),结果相同。

【问题讨论】:

    标签: java junit mocking mockito


    【解决方案1】:

    使用下面的导入

    import static org.mockito.ArgumentMatchers.*;
    

    避免使用 Matchers 类,因为它现在已被弃用,以避免与 Hamcrest org.hamcrest.Matchers 类发生名称冲突。

    【讨论】:

      【解决方案2】:

      您应该将其视为编译时错误,而不是异常(除非实际异常是您遇到未解决的编译时错误)。

      仅导入org.mockito.Matchers 意味着您可以在班级的任何地方使用名称Matchers 来表示org.mockito.Matchers。如果要导入方法,则需要静态通配符导入:

      import static org.mockito.Matchers.*;
      

      或具体方法:

      import static org.mockito.Matchers.anyString;
      import static org.mockito.Matchers.anyList;
      

      或者您可以只在调用代码中限定方法名称:

      Mockito.when(nrClient.uploadFiles("DF49ACBC8", Matchers.anyList(), "dl"))
             .thenReturn("");
      

      【讨论】:

      • 编译时错误是我的意思,谢谢你的建议。您的具体方法解决方案效果很好,感谢 Jon
      • @a.hrdie 然后接受答案 ;)
      • 哎呀,我等了 10 分钟,却被实施答案忘得一干二净
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      相关资源
      最近更新 更多