Одновременный запуск может привести к неожиданным результатам. Например, я только что обнаружил, что, хотя мой набор тестов с 200 тестами проходит при выполнении одного за другим, он не подходит для параллельного выполнения, я выкопал его, и это была не проблема безопасности потока, а тест в зависимости от другого, который это плохо, и я мог бы решить эту проблему.
Работа Mycila над JUnit ConcurrentJunitRunner и ConcurrentSuite очень интересна. Статья кажется немного устаревшей по сравнению с последней версией GA, в моих примерах я покажу обновленное использование.
Аннотирование тестового класса, подобного следующему, приведет к одновременному выполнению тестовых методов с уровнем параллелизма 6:
import com.mycila.junit.concurrent.ConcurrentJunitRunner;
import com.mycila.junit.concurrent.Concurrency;
@RunWith(ConcurrentJunitRunner.class)
@Concurrency(6)
public final class ATest {
...
Вы также можете запустить все тестовые классы одновременно:
import com.mycila.junit.concurrent.ConcurrentSuiteRunner;
@RunWith(ConcurrentSuiteRunner.class)
@Suite.SuiteClasses({ATest.class, ATest2.class, ATest3.class})
public class MySuite {
}
Зависимость Maven :
<dependency>
<groupId>com.mycila</groupId>
<artifactId>mycila-junit</artifactId>
<version>1.4.ga</version>
</dependency>
В настоящее время я изучаю, как запускать методы несколько раз и одновременно с этим пакетом. Возможно, это уже возможно, если у кого-нибудь есть пример, дайте мне знать, ниже моего домашнего решения.
@Test
public final void runConcurrentMethod() throws InterruptedException {
ExecutorService exec = Executors.newFixedThreadPool(16);
for (int i = 0; i < 10000; i++) {
exec.execute(new Runnable() {
@Override
public void run() {
concurrentMethod();
}
});
}
exec.shutdown();
exec.awaitTermination(50, TimeUnit.SECONDS);
}
private void concurrentMethod() {
//do and assert something
}
Как отмечали другие, верно, что вы никогда не можете быть уверены, будет ли обнаружена ошибка параллелизма, но с десятью тысячами или сотнями тысяч выполнений с параллелизмом, скажем, 16, статистика на вашей стороне.