我单元测试一个有很多逻辑的方法。它是这样的:
public void doSomething(int number){
//... complex logic
if (number % 2 == 0)
someInstanceObject.setOdd(false);
else
someInstanceObject.setOdd(true);
//... more complex logic and database connections
}
Mockito是否有可能在if-else语句之后结束方法执行?我想这样做的原因是因为我想使用Mockito.verify()
来测试这两个条件。我希望它立即停止,因为在if-else块之后,会有很多东西需要像数据库连接那样进行模拟。
请相信我,如果我可以重构这一点,将if-else语句放在其他实用程序类中并将其公开为public,我愿意。但事实证明,我不能重构代码了。
答案 0 :(得分:1)
我不认为在使用Mockito之后可以停止。你怎么能告诉mockito你想停止哪一点?
但是你可以尝试一个肮脏的解决方案 - 模拟一些方法调用,它会成功返回if,然后在你的测试方法中捕获它。它将停止方法执行,您不必模拟所有数据库内容。
答案 1 :(得分:0)
不,我无法想象Mockito有可能在某个方法的早期点返回。 Mockito需要从堆栈中弹出值并更改控制流。您将如何在代码中指定要执行的部分?
你可以做的是模拟方法,以便它执行第一个语句。但是,在这种情况下,您将针对模拟代码进行测试。此外,您将引入代码克隆(可能与原始代码不同步)。
答案 2 :(得分:0)
您可以将第二部分提取到另一个方法,可能包含可见性,然后使用doNothing()
模拟该方法。
但是,我相信,一旦你处于这一点,你应该重新考虑设计。