Не существует "хорошего" способа сделать это. Лучшее, что я могу предложить, это TestNG, который позволяет аннотировать ваши методы тестирования и одновременно запускать их в потоках n . Например:
@Test(invocationCount=10, threadPool=10)
public void testSomethingConcurrently() {
...
}
Мои знания TestNG в лучшем случае ржавые, но AFAIK, который должен вызывать метод testSomethingConcurrently
одновременно 10 раз. Это хороший и декларативный способ запуска многопоточных тестов для вашего кода.
Конечно, вы можете сделать что-то подобное в JUnit, порождая потоки вручную в цикле, но с этим безумно уродливо и трудно работать. Я должен был сделать это один раз для проекта, над которым я работал; эти испытания были кошмаром, поскольку их неудачи не всегда повторялись.
Тестирование на параллелизм является сложным и подверженным фрустрации из-за его недетерминированной природы. Это одна из причин того, почему в наши дни наблюдается такой сильный стимул использовать лучшие абстракции параллелизма, которые легче «рассуждать» и убеждать себя в правильности.