Подтвердить что ты не робот

Почему EclEmma не содержит код покрытия с помощью тестов с помощью @RunWith (PowerMockRunner.class)

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

Я использую JUnit 4.8.1 с Mockito.

Что это может быть?

4b9b3361

Ответ 2

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

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

Ответ 3

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

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

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

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

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

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

Ответ 4

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

static {
PowerMockAgent.initializeIfNeeded();
}

@Rule
public PowerMockRule rule = new PowerMockRule();

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

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