2015-06-19 61 views
0

我正在测试一个有很多逻辑的方法。它是这样的:是否可以使用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语句放在其他实用程序类中,并将它公开,我会。但事实证明,我无法重构代码了。

+0

您可以向该方法添加代码吗? – Grasshopper

回答

1

我不认为这是可能停止后,如果使用Mockito。你如何对mockito说,你想停止哪一点?

但是,你可以尝试一个肮脏的解决方案 - 模拟一些方法调用,如果抛出一个异常,然后在你的测试方法刚刚抓住它成功。它会停止执行方法,并且不必模拟所有数据库的内容。

+0

我认为这将是一个肮脏的解决方案,但我想这会比嘲笑其余的更好。 :/ – mpmp

0

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

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

0

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

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

+0

是的,我不能改变代码只是为了更好的单元测试。商业规则。 – mpmp

相关问题