У меня была очень странная проблема с отчетом IntelliJ о покрытии кода, который я не смог найти упомянутым где -либо еще. Для нескольких классов в одном пакете, если я запускаю соответствующие тесты вручную, в отчете покрытия показано 100% охват для этих классов; Однако, если я запускаю тесты для всего пакета, охват для этих классов значительно ниже (но не 0%), даже если те же тесты показаны как запуска. (например, если я запускаю com.example.wtf.footest , я вижу 100% покрытие для com.example.wtf.foo , но если я запускаю тесты для com.example.wtf , Я вижу 47% покрытие для com.example.wtf.foo , хотя com.example.wtf.footest был правильно запущен.) MVN Clean , удаление конфигураций Run и даже вручную копирование тестового класса (например, копирование com.example.wtf.footest to com.example.wtf.footest2 ) что -нибудь, чтобы решить проблему. Казалось бы, случайные линии сообщили о очень высоком количестве ветвей (например, возврат это; сообщается как охватывающие 8/10 ветвей). Я заметил обе проблемы во время несколько сложного рефакторинга, что заставляет меня подозревать, что они связаны, но это может быть совпадением. ) и JUNIT5. Я не использую никаких особенно экзотических функций; Существует несколько применений Mockitextension , но никаких других расширений, и все @parametizedtest используют стандартные источники тестирования. Я действительно не в недоумении из -за того, что может отбросить отчет о покрытии. в основном имена) удалено: < /p>
Код: Выделить всё
@Service
class FooFactory extends MemberHandler implements Supplier {
// superclass implements InvocationHandler and autowires a few dependencies
private final Foo proxy = createProxy();
@Override
public Foo get() {
return proxy;
}
private Foo createProxy() {
return (Foo) newProxyInstance(getClass().getClassLoader(), new Class[]{Foo.class}, this);
}
}
Когда я запускаю foohandlertest , все помечено как покрытое, но когда я запускаю тесты для пакета, только CreateProxy помечен как покрытый.
Другой класс имеет настройку, подобную этой: < /p>
Код: Выделить всё
@Service
class BarService implements Function {
Bar apply(Foo... foos) {
return apply(List.of(foos));
}
@Override
public Bar apply(List foos) {
// ...
}
}
< /code>
Когда я запускаю пакет тесты, первый метод помечен как покрытый, а второй - это не имеет смысла; Опять же, запуск barservicetest
в изоляции показывает правильное покрытие.
Подробнее здесь:
https://stackoverflow.com/questions/794 ... consistent