并发 JUnit 测试

我有一个大型JUnit测试套件,出于两个原因,我非常想同时运行所有测试:

  • 利用多个内核更快地运行整个测试套件
  • 希望检测到由于非线程安全的全局对象而导致的一些错误

我认识到这将迫使我重构一些代码以使其线程安全,但我认为这是一件好事:-)

让 JUnit 同时运行所有测试的最佳方法是什么?


答案 1

你固定到JUnit吗?TestNG提供了开箱即用的良好多线程测试,并且与JUnit测试兼容(您需要进行一些更改)。例如,您可以运行如下测试:

@Test(threadPoolSize = 3, invocationCount = 9,  timeOut = 10000)
public void doSomething() {
...
}

这意味着该方法将被3个不同的线程调用9次。doSomething()

我强烈推荐TestNG


答案 2

我一直在寻找这个问题的答案,根据这里的答案,以及我在其他地方读到的内容,似乎目前还没有一种简单的开箱即用方式来使用JUnit并行运行现有测试。或者如果有,我没有找到它。所以我写了一个简单的JUnit Runner来实现这一目标。请随时使用它;有关 MultiThreadedRunner 类的完整说明和源代码,请参阅 http://falutin.net/2012/12/30/multithreaded-testing-with-junit/。使用此类,您可以像这样注释现有的测试类:

@RunWith(MultiThreadedRunner.class)

推荐