我尝试使用when()方法在mockito中指定String值,如
@Mock Individual indProvider;
when(indProvider.asProvider().getProviderId()).thenReturn("795316051750");
但我有例外
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
0 matchers expected, 1 recorded.
This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
//correct:
someMethod(anyObject(), eq("String by matcher"));
For more info see javadoc for Matchers class.
在这种情况下,如何返回特定的String?
3条答案
按热度按时间k3fezbri1#
代码中可能有一个mockito Matcher在存根调用或验证调用之外使用。
如果您的代码库使用JUnit,我建议使用mockito runner,它将验证每个测试方法使用的mockito,这意味着任何问题都可以被精确定位到编写错误的测试。
或使用mockito规则(自1.10.17起)
您不必在测试中使用havex 1 m0n1x来从这个框架验证中获益,而且无论如何,与
MockitoAnnotations.initMocks(...)
相比,这两种方法都是示例化模拟的 * 首选 * 方式还有,您使用的是哪个版本的mockito?我相信Mockito已经改进了一些错误代码位置的消息。
请注意,这段代码无法正常工作,因为
indProvider.asProvider()
没有存根,所以mockito将使用默认值null
。您必须以任何一种方式执行此操作(深层存根用于遗留代码,返回mock的mock通常被视为代码气味,它显示测试代码破坏了Law of Demeter):或者如@przemek所回答的那样,它更冗长,并且在测试代码中显示出相同的弱点。
我建议你读这本书(Growing Object Oriented Software Guided by Tests),它是你能读到的关于编写测试指导的软件的最好的书之一,我发现它甚至比臭名昭著的有效Java书更重要。
ttygqcqt2#
您应该使用多个
when()
拦截:bt1cpqcv3#
您可以按如下方式求解: