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

Eclemma всегда сообщает 0% покрытия кода

У меня есть тестовый проект Maven для моего приложения.

Тесты JUnit работают нормально, а также проверяется проверка покрытия кода.

Но отчет всегда показывает 0% покрытия кода.

Что мне делать?

4b9b3361

Ответ 1

Согласно официальному сайту, Eclemma является плагином для охвата кода для Eclipse на основе библиотеки JaCoCo.

Как вы хотите использовать тот же механизм покрытия кода вне eclipse, вы должны включить плагин Jacoco внутри конфигурации Maven (pom) вашего проекта, как показано ниже (этот код был скопирован из блога Agile Engineering):

<build>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.6.0.201210061924</version>
            <executions>
                <execution>
                    <id>jacoco-initialize</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>jacoco-site</id>
                    <phase>test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Для запуска тестов просто введите в командной строке следующее:

mvn clean test

ps: вы также можете использовать другие плагины для покрытия кода, такие как Cobertura или Emma.

Ответ 2

На всякий случай вы забыли сделать это:

  • Вы комментируете свои тесты с помощью @Test?
  • Вы используете класс как тестовый пример JUnit или кнопку покрытия?

Я не уверен, в чем причина проблемы, потому что она всегда срабатывала для меня. Вы установили его из самого затмения? Попробуйте удалить его и переустановить из eclipse. Вот как это сделать на всякий случай:

  • В Eclipse нажмите "Справка" > "Установить новое программное обеспечение"
  • Нажмите "Добавить" и введите следующее:
  • Выберите EclEmma и установите

Ответ 4

Это известная проблема в течение многих лет, и, к сожалению, официального решения для нее пока нет.

Вы можете увидеть здесь здесь, здесь и здесь

Одним из решений не так-меда может быть попытка использовать eCobertura (или понизить eclemma от 2.x до 1.x)

Ответ 5

Я только что наткнулся на эту проблему, и это было вызвано неправильным образом настроенным classpath. Когда юнит-тесты были выполнены, они выполнялись против скомпилированной банки (фактический источник, скомпилированный вне eclipse), а не мой фактический исходный код. После удаления банки из моего пути к классам, тесты модулей правильно попали в мой исходный код пакета.

Ответ 6

Если вы используете eclemma, вам нужно добавить зависимость jacoco. если jacoco был добавлен и все еще, вы столкнулись с этой проблемой, обратитесь eclemma faq: "Почему класс показывается как не охваченный, хотя он был выполнен?"

он говорит,

Сначала убедитесь, что данные выполнения собраны. Для этого выберите ссылку "Сессии" в верхнем правом углу отчета HTML и проверьте, указан ли этот класс. Если он указан, но не связан, класс во время выполнения представляет собой другой файл класса. Убедитесь, что вы используете тот же файл класса во время выполнения, что и для создания отчетов. Обратите внимание, что некоторые инструменты (например, контейнеры EJB, mocking frameworks) могут изменять файлы классов во время выполнения.

Итак, Mockito/PowerMockito может вызвать эту проблему. вы могли бы создать экземпляр класса, который хотите протестировать, и сделали PowerMockito.spy() на этом объекте. Вам будет показано, что тестовый пример был выполнен без ошибок, но Jacoco не улучшит охват кода в своем отчете.

вы не должны помещать класс, который вы тестируете, в аннотацию @PrepareForTest(). проверьте, добавили ли вы его и удалили из аннотации.

Ответ 7

Мне удалось решить проблему на моем, вызвав экземпляр класса в верхней части тестовых примеров. т.е.

public hotelOccupancy hotel = new hotelOccupancy();

@Test
public void testName() {
    // some test here
}

Как только я сделал это, весь мой охват начал работать, и проблемы были решены.

Ответ 8

Я использую eclemma 2.3.2, и он отлично работает на eclipse

Мне нужно только добавить эти зависимости в мой pom.xml

<dependency>
    <groupId>org.jboss.arquillian.extension</groupId>
    <artifactId>arquillian-jacoco</artifactId>
    <version>1.0.0.Alpha6</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.jacoco</groupId>
    <artifactId>org.jacoco.core</artifactId>
    <version>0.7.1.201405082137</version>
    <scope>test</scope>
</dependency>

Затем я создаю проект, обновляю конфигурацию проектов maven и запускаю плагин плагина, как ожидалось