JUnit и Spring - покрытие кода% неверно при использовании нескольких потоков в тесте

Мы попытались использовать пару плагинов для покрытия кода для нашего весеннего проекта (EclEmma, ​​Clover).

Оба дают неверные результаты в отношении% покрытия.

Тесты используют TaskExecutor Spring (пул потоков).

Весь код, выполняемый потоками исполнителей задач, не считается покрываемым.

Есть идеи почему?

2 ответа

У меня та же проблема. Похоже, что тестовое покрытие не очень хорошо работает с многопоточностью.

Я только что затронул ту же проблему, но подумав, как JUnit/EclEmma может знать или отслеживать код, который выполняется в нескольких / других потоках, работающих параллельно? Я предполагаю, что он работает только в потоке main / current. Правильный подход для модульных тестов и, следовательно, для покрытия, состоит в том, чтобы изолировать [как метод] и протестировать код, который выполняется в этих других потоках, в отдельном тесте. Один из способов убедить себя... попытаться установить точку останова, пока JUnit работает в режиме отладки. Это также не "работает"... переходя на точку останова, вы можете обнаружить, что не попадаете в следующую инструкцию и / или код в другом потоке давно закончился, и тест фактически уже завершен.

Другие вопросы по тегам