Почему EclEmma не покрывает код тестами с @RunWith (PowerMockRunner.class) - PullRequest
11 голосов
/ 15 марта 2012

Я использую EclEmma с Eclipse, чтобы помочь мне узнать, где пропущены тесты кода в моем проекте, но все тесты с @RunWith(PowerMockRunner.class) не вызываются и, следовательно, не тестируются.

Я использую JUnit 4.8.1 с Мокито.

Что бы это могло быть?

Ответы [ 4 ]

3 голосов
/ 23 октября 2012

Это известная ошибка, сообщенная для обеих сторон:

http://code.google.com/p/powermock/issues/detail?id=402 https://github.com/jacoco/eclemma/issues/15#issuecomment-9565210

eCoberture , однако, обеспечивает правильное покрытие.Единственная проблема в том, что она, похоже, больше не поддерживается, и вы не можете убрать блики в Eclipse Juno.

1 голос
/ 31 января 2017

У нас есть статические классы для насмешек.При использовании насмешливых статических классов плагин eclEmma для покрытия кода не работает в Eclipse.Так что мы сделали, поместили @RunWith (JUnit4.class) (вместо @RunWith (PowerMockRunner.class)) перед классом и поместили следующие строки внутри класса

static {
PowerMockAgent.initializeIfNeeded();
}

@Rule
public PowerMockRule rule = new PowerMockRule();

Скомпилировали класс и запустили тестучебный класс.Покрытие кода работает нормально для класса.Это изменение только для запуска подключаемого модуля eclEmma в Eclipse IDE без проблем.

После написания тестовых примеров мы вернули код в нормальное состояние.Поместил @RunWith (PowerMockRunner.class) вместо @RunWith (JUnit4.class) и прокомментировал выше статический код и строки powermockrule.

1 голос
/ 01 ноября 2015

Здесь вы можете найти пример, который работает и может помочь вам решить эту проблему https://github.com/Godin/jacoco-experiments

используйте mvn clean package, чтобы увидеть отчет jacoco

0 голосов
/ 24 июля 2012

AFAIK eclEmma, ​​как и многие другие системы покрытия, модифицируют ваши файлы .class, чтобы добавить инструкции покрытия. Большинство этих инструментов делают это во время компиляции, а не во время выполнения.

Вместо этого PowerMock, а также AspectJ LTW и многие другие системы манипулируют тем же байт-кодом, но во время выполнения:

PowerMock - это фреймворк, расширяющий другие фиктивные библиотеки, такие как EasyMock, более мощными возможностями. PowerMock использует пользовательский загрузчик классов и манипуляции с байт-кодами, чтобы включить моделирование статических методов, конструкторов, конечных классов и методов, частных методов, удаление статических инициализаторов и т. Д.

У меня похожая проблема как с eclEmma (различные версии), так и с Cobertura в сочетании с AspectJ LTW, потому что когда происходит изменение во время выполнения файлов .class, это каким-то образом повреждает изменение, выполненное ранее инструментом покрытия.

Я еще не нашел решения, но, по крайней мере, нашел симптом.

Правильным решением было бы отладить инструментарий PowerMock и выяснить, где и как он ломает инструменты покрытия. Для инструмента тестирования довольно сложно сломать инструменты покрытия, поскольку оба они довольно часто используются вместе:)

...