问题之一
Mockito.when是传递给它的参数是您要存根的表达式。因此,当您
Mockito.when对同一个方法调用使用两次时,第二次使用它,您实际上会得到第一次插拔的行为。
我实际上建议不要使用
Mockito.when。使用它时,您可能会陷入很多陷阱–在很多情况下,您需要使用其他语法。“更安全”的替代语法是Mockito方法的“
do”族。
doReturn(value).when(mock).method(arguments ...);doThrow(exception).when(mock).method(arguments ...);doAnswer(answer).when(mock).method(arguments ...);
所以你要
doThrow(new BadSqlGrammarException(??, ??, ??)).when(accountMapper).createBadGrammarException();
如果您从Mockito开始,那么我建议您学习使用“
do”系列。它们是模拟void方法的唯一方法,Mockito文档专门提到了这一点。但是只要可以使用它们就
Mockito.when可以使用。因此,如果您使用“
do”系列,那么您的测试将具有更高的一致性,并且学习曲线更少。
有关 必须 使用“
do”族的情况的更多信息,请参阅我对形成Mockito“语法”的回答



