我有一个非常简单的Check
类,它有一个阻塞waitForCondition()
方法。这个方法是阻塞的。我想为此方法创建一些单元测试。首先,该方法应在满足条件时返回。其次,方法应该在被中断时返回。
在内部,Check
该类有一个ArrayBlockingQueue
并调用它的take()
方法,所以我的测试实际上是关于正确编码条件的逻辑(应该如此)。在应用程序中,Check
类的数据由另一个线程通过InputData
方法提供。该InputData
方法对传入数据执行逻辑,并在满足条件时在 ArrayBlockingQueue 中放置一个虚拟对象。这应该会导致waitForCondition()
返回。
所以我的第一个想法是我可以InputData
通过模拟测试并检查在满足条件时是否将虚拟对象添加到队列中。这将需要更改类的设计,因为队列是私有数据成员(除非可以模拟私有数据)。当满足条件时,它不会直接添加到队列中,而是InputData
必须调用可以模拟的东西。
但是,如果方法正常运行,则存在检查waitForCondition()
方法本身的问题。InputData
这真的很简单的代码:
try {
myArrayBlockingQueue.take();
return true;
} catch (InterruptedException ex) {
return false;
}
所以我想知道它是否值得想象中的麻烦:一个使用 a 创建另一个线程的测试Check
,调用它waitForCondition()
,然后在完成后返回一些东西。也许,使用 Executor 服务。模糊部分是如何同步assertTrue(...)
. 我发现这篇关于异步测试的文章看起来可以解决问题。
问题总结:
- 我是否应该更改设计以测试其中的逻辑
InputData()
,如果是,如何? - 我应该忽略
waitForCondition()
只要InputData()
被测试的测试吗? - 还是只做需要做的事情(有点复杂的单元测试)并
waitForCondition()
直接测试更好?