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

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

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

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

Что я должен делать?


person renanleandrof    schedule 18.12.2012    source источник


Ответы (8)


Согласно официальному сайту, 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 или Эмма.

person Joao Piccinini    schedule 02.01.2013
comment
Мне не удалось вставить гиперссылки для Eclemma и для веб-сайты Эммы в сообщении выше. - person Joao Piccinini; 02.01.2013
comment
У меня также возникла такая же проблема, у меня есть проект GWT, а не maven..., как сказал Ренанф, я всегда получаю покрытие 0% для всего. - person Dipak; 10.01.2013

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

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

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

  1. В Eclipse нажмите «Справка» > «Установить новое программное обеспечение».
  2. Click "Add", and type the following:
  3. Выберите EclEmma и установите
person Steve    schedule 18.12.2012
comment
Да, используя @Test. Бег от кнопки покрытия. Тесты проходят нормально, но покрытие всегда показывает 0%, все красные пути. - person renanleandrof; 19.12.2012
comment
Нет... все так же =/. Вы используете его в проекте maven? Потому что проблема, кажется, возникает только в проектах maven здесь. - person renanleandrof; 21.12.2012
comment
Я так не думаю, я даже не знаю, что такое maven. - person Steve; 26.12.2012
comment
У меня была похожая проблема, и это было потому, что я аннотировал класс с помощью @RunWith(PowerMockRunner.class) - как только я изменил его, чтобы он не нуждался в этом, тогда покрытие кода снова вернулось - person Rob Wilson; 23.05.2019

Теперь я понял, что вы просто хотите получить отчет, используя инструмент внутри Eclipse...

Каково покрытие кода в диалоговом окне Eclipse? Вы пытались использовать щелчок правой кнопкой мыши в этом диалоговом окне, чтобы экспортировать сеанс (отчет) или внутри Файл -> Экспорт?

person Joao Piccinini    schedule 02.01.2013
comment
Да, это только для экспорта выполнения покрытия, экспортируемый отчет продолжается с покрытием 0% =/ - person renanleandrof; 02.01.2013
comment
Итак, у меня есть два предложения: 1. Попробуйте переустановить плагин Eclemma (если вы использовали сайт обновлений для его установки в последний раз, попробуйте установить его из маркетплейса сейчас); 2. Если предыдущее не сработало, попробуйте использовать библиотеку JaCoCo непосредственно из Maven (как я объяснил в другом посте), чтобы изолировать проблему, убедившись, что проблема связана только со слоем выше Jacoco (плагин eclipse), а не от этого двигателя. - person Joao Piccinini; 02.01.2013

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

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

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

person KrishPrabakar    schedule 02.12.2015

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

это говорит,

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

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

Наконец, удаление класса из аннотации @PrepareForTest() улучшило охват кода. проверьте, добавили ли вы его или нет, и удалите его из аннотации, если он добавлен.

person swaroop    schedule 07.02.2017

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

person slocumro    schedule 12.07.2016

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

public hotelOccupancy hotel = new hotelOccupancy();

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

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

person Westin Christensen    schedule 26.10.2017

Я использую 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 и запускаю плагин покрытия, как и ожидалось.

person Kurohige    schedule 17.02.2016