Maven surefire插件是否使用多个线程运行测试?

har*_*are 16 junit maven-2 unit-testing surefire

我想知道Maven surefire插件是否默认运行多线程测试(如果可以控制线程数?)或者它是否以随机顺序或可预测顺序从Test类运行测试,或者如果订单可以通过某种方式决定.

我还没有验证这一点(明天我会这样做,只是在寻找一些提示指导和验证),但看起来好像我的各种JUnit Test类正在以一些混合的顺序运行测试.这使得编排测试资源(在我的情况下非常大)是一个真正的痛苦.

它可能是一个经典的问题,我使用Eclipse JUnit运行程序运行我的套件,一切都运行非常线性,并且运行良好.我去Maven cmd线,事情似乎互相踩着.

Pas*_*ent 13

默认情况下,Maven在单独的("分叉")进程中运行您的测试,仅此而已(可以使用forkMode可选参数控制).

如果您使用的是TestNG Junit 4.7+(自SUREFIRE-555以来),则可以并行运行测试(请参阅parallelthreadCount可选参数),但这不是默认设置.

现在,虽然我不确定surefire插件的行为是否与JUnit相同,但可以通过手动创建TestSuite并指定执行测试的顺序来获得一些控制:

TestSuite suite= new TestSuite();
suite.addTest(new MathTest("testAdd"));
suite.addTest(new MathTest("testDivideByZero")); 
Run Code Online (Sandbox Code Playgroud)

然而,强烈建议您永远不要依赖于测试执行顺序,单元测试确实应该是独立的.

PS:以防万一,还有这个请求SUREFIRE-321(按字母顺序运行测试)你可能想要投票.