我有一个程序,可以将工作项目从阻塞队列中取出,并同时对它们进行处理。我意识到这是一个非常松散的描述,但任何人都可以提出一个单元测试策略/想要测试什么?Java - 并发/阻塞队列单元测试策略
5
A
回答
2
在java.util.concurrent中使用工作队列机制并依赖它们来测试它们的代码。然后,测试你的工作人员,确保它做到了正确的事情。如果它独立于其他应该足够的线程。否则,您可能需要在符合您的生产环境的hardware/os/jvm配置上提出集成测试策略。
2
您需要设计它进行测试。
所以具体的建议:
- 确保您可以将测试类或嘲笑到队列
- 代码的一些早期的模拟,需要更长的时间,并确保他们是不是完成了第一批(演示并发性)
- 确保您的结果集大小与所有测试相同。
- 确保您的结果在分配给最长测试的时间后才完成。
嗯,这一切都源于能够将嘲笑/测试类注入到队列中。
+0
谢谢,这些都是好主意。 – 2012-01-10 23:34:04
2
这种类型取决于您的课程进行的处理类型,以及取消的项目。例如,假设他们将项目写入数据库。你可能想要这样的测试。
- 单线程可以从队列中拉出一个项目并将其保存到数据库中。
- 两个线程可以同时从队列中取出项目,并且如果第一个线程先尝试保存,则会保存数据。
- 两个线程可以同时从队列中取出项目,并且如果第二个线程先尝试保存,则会保存数据。
- 五十个线程(或任何限制适用于您的程序)可以同时从队列中拉出项目,并正确保存数据。
如果您正在使用某个JDK阻塞队列实现或来自第三方的实现,请确保您不要尝试测试阻塞队列类本身的行为。当然,如果你编写了自己的代码,那么你需要编写更多的测试。
希望这会有所帮助。
+0
谢谢,这些都很棒。 – 2012-01-10 23:35:15
相关问题
- 1. 测试非阻塞队列
- 2. Java中的并发和阻塞队列
- 3. 并发问题 - 阻塞队列
- 4. Java中的阻塞队列
- 5. Java,被阻塞的队列
- 6. 阻塞'take()'的队列实现,但带有驱逐策略
- 7. 单进程阻塞队列
- 8. 非阻塞队列
- 9. Vertx单元测试阻塞主线程
- 10. LinkedTransferQueue是阻塞队列还是非阻塞队列?
- 11. 阻塞队列Ç
- 12. 阻塞队列不阻塞线程?
- 13. 单元测试策略,NHibernate的库
- 14. Java EE测试策略
- 15. 单元测试非阻塞方法(异步测试)
- 16. 非阻塞Jms队列发件人
- 17. 阻塞队列实现
- 18. 队列阻塞主线程
- 19. 阻塞队列和InterruptedException
- 20. 阻塞队列设计
- 21. REST和阻塞队列
- 22. GCD - dispatch_async上阻塞队列
- 23. EJB测试策略?
- 24. 仅包含唯一元素的Java阻塞队列
- 25. 并发包中的阻塞队列方法;
- 26. 如何创建我们可以阻塞的Java并发队列 - 在单个调用中使用多个元素?
- 27. ActivePivot测试策略
- 28. nhibernate测试策略
- 29. 是否在同步GCD队列上放置一个阻止阻塞并暂停其他阻塞的阻塞?
- 30. 2人团队的简单开发/测试/生产环境策略
你想要测试什么,BlockingQueue或并发处理对返回值的有效性? – 2012-01-10 23:11:02
我已经测试了阻塞队列处理程序工作的实际工作的有效性,但我想测试围绕它的操作的代码。 – 2012-01-10 23:32:58
对并发的测试非常棘手:您可以拥有一个非常糟糕的多线程程序,它可以在某些平台(例如单核CPU)上完美地通过所有测试,但在其他平台上失败。即使您的测试在多核CPU上成功,线程调度也会因不同的操作系统而有所不同,并且可能会在别处失败。 – toto2 2012-01-11 00:24:25