Pet*_*ete 5 java multithreading unit-testing
我有一个非常简单的Check类,它具有阻塞waitForCondition()方法。此方法被阻止。我想为此方法创建一些单元测试。首先,该方法应在满足条件时返回。其次,该方法应在被中断时返回。
在内部,Check该类具有ArrayBlockingQueueand调用其take()方法,所以我的测试实际上是关于正确编码条件的逻辑(应该如此)。在应用程序中,Check该类的数据由另一个线程通过InputData方法提供。该InputData方法对传入的数据执行逻辑,并在满足条件时将虚拟对象放置在ArrayBlockingQueue中。这应该导致waitForCondition()返回。
因此,我的第一个想法是我可以InputData通过模拟来测试,并检查是否满足条件时将虚拟对象添加到队列中。这将需要更改类的设计,因为队列是私有数据成员(除非可以模拟私有数据)。InputData满足条件时,与其直接添加到队列中,不如调用可能被嘲笑的东西。
但是waitForCondition(),如果InputData功能正常,则存在检查方法本身的问题。它实际上是简单的代码:
try {
myArrayBlockingQueue.take();
return true;
} catch (InterruptedException ex) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
所以我想知道是否值得想象的麻烦:一个测试创建一个带有的另一个线程Check,调用waitForCondition(),然后在完成后返回结果。也许,使用执行器服务。模糊部分是如何同步assertTrue(...)。我发现这篇关于异步测试的文章似乎可以解决问题。
问题摘要:
InputData()吗?waitForCondition()时间InputData()吗?waitForCondition()直接测试更好?如果您在 Check 类的构造函数中注入 ArrayBlockingQueue 的实例,那么您的测试可以在测试中间注入适当的值。
然后,您可以运行带有超时的单元测试,如果它在 100 毫秒左右没有返回,则失败。
| 归档时间: |
|
| 查看次数: |
677 次 |
| 最近记录: |