Sha*_*aju 22 tdd junit nunit unit-testing infinite-loop
这个问题刚刚出现在我的脑海里,我想在这里问这个问题.
这个案例是有意的,我只写了一个无限运行的循环.我该如何进行单元测试呢?
我问这个是因为,这种情况可能发生在代码中的任何地方.假设我的方法委托给其他几种方法,我想知道
我没有为此编写代码.问题纯粹是出于知识,如果将来出现这种情况该怎么办.请回复.
k3b*_*k3b 11
如何对一些输入运行到无限循环的方法进行单元测试?
您可以测试几乎相反的方法:" 如何对方法进行单元测试,以使该方法的某些输入的运行时间不会超过Xxxx毫秒 ".如果此测试失败,您可能已找到具有无限循环的候选者.
NUnit 2.5有一个TimeoutAttribute,如果测试时间超过给定的毫秒数,则测试失败.
具有循环委托循环检查的函数到注入的依赖项:
interface IShouldLoop
{
bool ShouldLoop();
}
class ClassToTest
{
private final IShouldLoop shouldLoop;
public ClassToTest(IShouldLoop shouldLoop)
{
this.shouldLoop = shouldLoop;
}
public void MethodToTest()
{
while(shouldLoop.ShouldLoop())
{
// do whatever
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以测试它IShouldLoop每次都将循环检查委托给依赖项,并且您可以控制测试中的循环,以便它只循环您想要的次数.在生产环境中,使用其实例IShouldLoop始终返回true来实例化它.
我希望你的意思是某种消息泵/事件处理循环.(大多数无限循环都很糟糕).
我确保循环委托给处理输入的某个类.彻底测试这个课程.
循环结构失效的概率很小.所以我通过验收测试或手动测试.
这有点类似于测试可执行文件的Main函数.这里的诀窍还在于确保主代表服务于一个可测试的类.