如何编写多线程单元测试?

时间:2010-07-15 13:41:54

标签: java multithreading unit-testing junit

我想知道是否有一些单元测试框架能够轻松编写多线程测试?

我想象的是: n个线程同时调用m次特殊测试方法。在完成所有测试线程之后,将调用一个断言方法,其中应该验证一些约束。

我目前的方法是在junit测试方法中创建Thread对象,手动循环每个run()方法中的实际测试用例,等待所有线程然后验证断言。但是使用这个,我为每个测试都有一个大的样板代码块。

您有什么经历?

3 个答案:

答案 0 :(得分:11)

ConTest,还有GroboUtils

多年前我使用过GroboUtils,它完成了这项工作。 ConTest是更新的,现在是我首选的起点,因为仪器不仅仅依靠试验和错误,而是强制线程的特定交错,提供确定性测试。相比之下,GroboUtils MultiThreadedTestRunner只是运行测试,并希望调度程序产生一个交错,导致线程错误出现。

编辑:另请参阅ConcuTest,它也强制进行交错并且是免费的。

答案 1 :(得分:4)

FindBugs的Bill Pugh也有MultithreadedTC的名声。

答案 2 :(得分:0)

使用并发库可以简化代码。您可以将锅炉板代码转换为一种方法。

这样的东西
public static void runAll(int times, Runnable... tests) {

}