是否可以使用Mockito完全停止运行方法?

时间:2015-06-19 17:36:55

标签: java unit-testing mockito

我单元测试一个有很多逻辑的方法。它是这样的:

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,我愿意。但事实证明,我不能重构代码了。

3 个答案:

答案 0 :(得分:1)

我不认为在使用Mockito之后可以停止。你怎么能告诉mockito你想停止哪一点?

但是你可以尝试一个肮脏的解决方案 - 模拟一些方法调用,它会成功返回if,然后在你的测试方法中捕获它。它将停止方法执行,您不必模拟所有数据库内容。

答案 1 :(得分:0)

不,我无法想象Mockito有可能在某个方法的早期点返回。 Mockito需要从堆栈中弹出值并更改控制流。您将如何在代码中指定要执行的部分?

你可以做的是模拟方法,以便它执行第一个语句。但是,在这种情况下,您将针对模拟代码进行测试。此外,您将引入代码克隆(可能与原始代码不同步)。

答案 2 :(得分:0)

您可以将第二部分提取到另一个方法,可能包含可见性,然后使用doNothing()模拟该方法。

但是,我相信,一旦你处于这一点,你应该重新考虑设计。