Java-并发/阻塞队列单元测试策略
我有一个程序,它可以从阻塞队列中提取工作项,并同时处理它们。我意识到这是一个非常松散的描述,但是有人能就测试什么提出一个单元测试策略/想法吗?使用java.util.concurrent中的工作队列机制,并依靠它们来测试代码。然后,只需测试你的工人,以确保它做正确的事情。如果它独立于其他线程,那就足够了。否则,您可能需要在与您的生产环境相匹配的硬件/os/jvm配置上提出一个集成测试策略。您需要设计它以进行测试 因此,具体建议如下:Java-并发/阻塞队列单元测试策略,java,testing,concurrency,Java,Testing,Concurrency,我有一个程序,它可以从阻塞队列中提取工作项,并同时处理它们。我意识到这是一个非常松散的描述,但是有人能就测试什么提出一个单元测试策略/想法吗?使用java.util.concurrent中的工作队列机制,并依靠它们来测试代码。然后,只需测试你的工人,以确保它做正确的事情。如果它独立于其他线程,那就足够了。否则,您可能需要在与您的生产环境相匹配的硬件/os/jvm配置上提出一个集成测试策略。您需要设计它以进行测试 因此,具体建议如下: 确保可以将测试类或模拟放入队列中 对一些早期模拟进行编码,使
- 确保可以将测试类或模拟放入队列中
- 对一些早期模拟进行编码,使其花费更长的时间,并确保它们不是第一个完成的模拟(演示并发性)
- 确保结果集合的大小与所有测试的大小相同
- 确保在分配给最长测试的时间之前,您的结果不会完整
嗯,这一切都源于能够将模拟/测试类注入到队列中。这取决于您的类对提取的项目执行何种处理。例如,假设他们将项目写入数据库。您可能需要这样的测试
- 单个线程可以从队列中提取项目并将其保存到数据库中
- 两个线程可以同时从队列中提取项目,如果第一个线程尝试先保存数据,则会保存数据
- 两个线程可以同时从队列中提取项目,如果第二个线程尝试先保存数据,则会保存数据
- 五十个线程(或任何适合您的程序的限制)可以同时从队列中提取项目,并正确保存数据
希望这能有所帮助。您想测试什么,阻塞队列或对返回值的并发处理的有效性?我已经测试了阻塞队列处理程序实际工作的有效性,但我想测试一下它的操作代码。并发性测试很棘手:你可能有一个糟糕的多线程程序,它可以在某些平台(例如单核CPU)上完美地通过所有测试,但在其他平台上会失败。即使您的测试在多核CPU上成功,不同操作系统的线程调度也会有所不同,并且可能在其他地方失败。