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

如何修复Mockito无效使用参数匹配器错误

穆俊哲
2023-03-14

我试图使用Mockito来模拟一个方法,但是,我不断地出错。我试图用spring注释设置Mockito

@RunTo(MockitoJUnitRunner.class)类CPEServiceInvokerInimplNewTest{

@InjectMocks
CPEServiceInvokerImpl cPEServiceInvokerImpl;

然后我用这个Mockito调用-

ExtensionWebClientUtil extensionWebClientUtil = Mockito.mock(ExtensionWebClientUtil.class);
Mockito.when(extensionWebClientUtil.postXMLExchange(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.any(),
                Mockito.anyString())).thenReturn(Mockito.any());

尝试并模仿这种方法-

public ResponseEntity<String> postXMLExchange(String restBaseUrl, String endPoint, String jsonBody, Boolean authTokenRequired,String subsKey) ;

我得到了这个错误-

Exception in CPE response org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Invalid use of argument matchers!
5 matchers expected, 1 recorded:
-> at com.retail.store.basket.extn.service.CPEServiceInvokerImplNewTests.test_JUnit(CPEServiceInvokerImplNewTests.java:61)

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

有关更多信息,请参阅javadoc For Matchers类。

共有1个答案

钮巴英
2023-03-14

https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/InjectMocks.html:

再次注意,@InjectMocks将只注入使用@Spy或@Mock注释创建的Mock/spie。

因此,您的代码应该如下所示:

@Mock
ExtensionWebClientUtil extensionWebClientUtil;

@InjectMocks
CPEServiceInvokerImpl cPEServiceInvokerImpl;

...

Mockito.when(extensionWebClientUtil.postXMLExchange(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.any(),
                Mockito.anyString())).thenReturn(Mockito.any());
 类似资料:
  • 问题内容: 下面的简单测试案例失败了,但有一个例外。 我不知道怎么了 问题答案: Mockito要求您在存入方法调用时仅使用原始值或仅使用匹配器。完整的例外情况(您未在此处发布)肯定可以解释所有情况。 简单更改行: 至 它应该工作。

  • 问题内容: 有没有办法匹配以下示例例程的任何类参数? 无论传递到哪个类,如何 始终 返回a ?以下尝试仅适用于匹配的特定情况。 编辑 :一种解决方案是 问题答案: 还有两种方法(请参阅我对@Tomasz Nurkiewicz的先前回答的评论): 第一个依据的事实是编译器根本不会让您传递错误的类型: 您会丢失准确的输入(),但可能会按需要使用。 第二个涉及更多,但如果您 确实 要确保to的参数是的或

  • 问题内容: 我有这样声明的方法 这个枚举 问题:如何模拟通话?我无法比拟。 以下无效: 问题答案: 将达到目的: 附带说明:考虑使用静态导入: 模拟变得更短:

  • 问题内容: 争论的Mockito匹配器(如,,,,和)从Hamcrest匹配器表现非常不同。 匹配器经常导致,即使在使用任何匹配器很长时间后执行的代码中也是如此。 匹配器遵循怪异的规则,例如,如果给定方法中的一个参数使用匹配器,则仅要求对所有参数使用Mockito匹配器。 当覆盖或使用时,匹配器可能导致 。 使用Mockito匹配器以某些方式重构代码会产生异常和意外行为,并且可能会完全失败。 为什

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

  • 我注意到,如果未提供,则它将不匹配。 如何更改它,使是可选的?