我正在编写单元测试,并且我坚持使用无限循环的方法。
我有一个使用main
方法执行的主类,因此我必须使用没有注释的junit.framework.Test
,例如@Test(timeout=1000)
,而是通过创建来调用主类它的构造函数。
现在的问题是:我已经编写了所有测试用例,并且看起来很可能正常工作,但是测试仍处于无限循环中。
来自我使用junit.framework.Test
而不是org.junit.Test
的主要测试类。我调用了另一个类的公共方法,类似于
public class AnotherClass{
public void method()
{
for( ; ;) // this is an infinite loop
{
.....
}
}
}
这是因为它实际上是在连续监视目录,程序必须一直运行直到手动终止。
我的主要测试类调用这个类的方法,它再也不会将控制权返回给我的测试类。因为,我正在编写测试,我无法修改该方法。
如何终止或取消该课程的控制权(返回我的考试类)?
我尝试在我的测试类中使用timer / thread来阻止它在一定时间后执行,但这不起作用,因为控件转到另一个调用了公共方法的类并且它永远停留在那里。
关于如何做到这一点的任何想法?
如果您需要更多信息,请告知我们。感谢
注意:具有无限循环的类不是测试类,它是包中的主类,所以我不能在那里进行任何修改。
我有一个一个解决方案,它基于这个logic,但我希望找到比这更好的东西,或者可能找到其他可能的解决方案
答案 0 :(得分:0)
我认为您确实需要将问题划分为较小的部分,然后将解决方案组合在一起以获得最终解决方案:
ExecutorThread
并取消Future
s,甚至是守护程序线程最终解决方案将是所有部分解决方案的组合。