kk1*_*957 5 testing loops mocking infinite mockito
我有一个方法如下
public class ClientClass {
public void clientMethod() {
while(true){
doSomethings.....
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用mockito进行测试。我能够调用 clientMethod,但由于 clientMethod 内部有 while(true),因此该调用永远不会返回,并且我永远不会到达我的断言语句,这些语句(当然)是在 clientMethod() 调用之后发生的。有没有办法在我的测试用例的一次循环迭代后停止循环?
从技术上讲,如果不从内部抛出异常,就无法打破测试中的无限循环。如果循环内有一些东西可以模拟,那么它可能会为您产生异常。
当您发现自己处于这样的情况时,当测试需要尴尬的解决方法时,那么是时候停下来思考设计了。不可测试的代码通常难以维护,而且不太不言自明。所以我的建议是摆脱无限循环并引入适当的循环条件。毕竟,没有任何应用程序会永远存在。
如果您仍然确信无限循环是最好的方法,那么您可以执行轻微的分解以使事情更易于测试:
public class ClientClass {
// call me in production code
public void clientMethod() {
while(true){
doSomethings();
}
}
// call me in tests
void doSomethings(){
// loop logic
}
}
Run Code Online (Sandbox Code Playgroud)