JUnit и Spring - покрытие кода% неверно при использовании нескольких потоков в тесте
Мы попытались использовать пару плагинов для покрытия кода для нашего весеннего проекта (EclEmma, Clover).
Оба дают неверные результаты в отношении% покрытия.
Тесты используют TaskExecutor Spring (пул потоков).
Весь код, выполняемый потоками исполнителей задач, не считается покрываемым.
Есть идеи почему?
2 ответа
У меня та же проблема. Похоже, что тестовое покрытие не очень хорошо работает с многопоточностью.
Я только что затронул ту же проблему, но подумав, как JUnit/EclEmma может знать или отслеживать код, который выполняется в нескольких / других потоках, работающих параллельно? Я предполагаю, что он работает только в потоке main / current. Правильный подход для модульных тестов и, следовательно, для покрытия, состоит в том, чтобы изолировать [как метод] и протестировать код, который выполняется в этих других потоках, в отдельном тесте. Один из способов убедить себя... попытаться установить точку останова, пока JUnit работает в режиме отладки. Это также не "работает"... переходя на точку останова, вы можете обнаружить, что не попадаете в следующую инструкцию и / или код в другом потоке давно закончился, и тест фактически уже завершен.