Все тестовые примеры jUnit не выполняются для проекта Maven с использованием PowerMock с easymock, Surefire

В проекте Maven я использую PowerMock-easymock для запуска тестов jUnit. но при выполнении "mvn clean install" я получаю результат ниже ..


T E S T S

Запуск тестов TestSuite: 2, сбоев: 0, ошибок: 0, пропущено: 0, истекшее время: 0,621 сек.

Результаты :

Запуск тестов: 2, сбоев: 0, ошибок: 0, пропущено: 0


Но у меня есть много других тестовых случаев. Вот часть pom.xml

<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.2</version>
        <scope>test</scope>
</dependency>
<dependency>
        <groupId>org.easymock</groupId>
        <artifactId>easymock</artifactId>
        <version>3.1</version>
        <scope>test</scope>
</dependency>
<dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-easymock-release-full</artifactId>
        <version>1.4.12</version>
        <type>pom</type>
</dependency>

Если я удалю зависимость PowerMock и сделаю «mvn clean install», все тестовые примеры будут работать нормально. Но я должен использовать PowerMock. Как решить эту проблему?


person Jyoti Ranjan    schedule 07.01.2013    source источник


Ответы (4)


Я предполагаю, что некоторые из ваших тестовых случаев не работают, вы пробовали это

  1. Используйте плагин mvn surefire и включите в него тестовые примеры.

  2. обеспечить зависимость powermock-module-junit4.

    проверьте эту ссылку: code.google.com/p/powermock/wiki/EasyMock_maven http://code.google.com/p/powermock/wiki/GettingStarted

person Dipak    schedule 07.01.2013
comment
поэтому вы пытались запустить его, поместив все файлы testCase в mvn sure-fire-plugin с зависимостью от PowerMock. - person Dipak; 07.01.2013
comment
Я думаю, вы упустили некоторую зависимость, для powermock-module-junit4 проверьте эту ссылку: код . google.com/p/powermock/wiki/EasyMock_maven - person Dipak; 07.01.2013
comment
отличная работа, чувак. Ваши оба решения работают :) :) Теперь я думаю, какое решение лучше: D большое спасибо - person Jyoti Ranjan; 07.01.2013
comment
Я предпочитаю зависимость от powermock-module-junit4, это было бы более естественно. В любом случае, решать вам... ТС, чувак. - person Dipak; 07.01.2013

У меня была такая же проблема, и мне потребовалось время, чтобы понять. Моя установка использовала более старую версию jboss.javassist, которая, как ни странно, вообще мешала работе PowerMockRunner.

Стоит отметить, что у меня также смешанная среда JUnit/TestNG. Ранее я пробовал добавить несколько надежных провайдеров, и это тоже не сработало (используя верную версию 2.14.1). После обновления до surefire 2.17 мои тесты JUnit и TestNG начали работать без необходимости объявлять каких-либо поставщиков surefire. На самом деле провайдер JUnit выдал мне ошибку, потому что я использую группы. По-видимому, поставщик TestNG допускает текст в произвольной форме (например, «интеграция»), в то время как поставщик JUnit ожидает путь к классам (например, «com.example.UnitTests»).

Вот мой раздел плагинов...

        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.17</version>
            <configuration>
                <groups>spring, unit, integration</groups>
                <systemPropertyVariables>
                    <java.awt.headless>true</java.awt.headless>
                    <org.apache.activemq.default.directory.prefix>target/test/</org.apache.activemq.default.directory.prefix>
                    <log4j.configuration>file:${project.basedir}/src/test/resources/log4j.properties</log4j.configuration>
                </systemPropertyVariables>
                <argLine>${surefire.args}</argLine>
            </configuration>
        </plugin>

... и соответствующие отделы тестирования ...

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.9.5</version>
        <scope>test</scope>
    </dependency>
    <!--
    PowerMock versions are compatible with specific Mockito versions.
    https://code.google.com/p/powermock/wiki/MockitoUsage13
     -->
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-module-junit4</artifactId>
        <version>1.5.4</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-api-mockito</artifactId>
        <version>1.5.4</version>
        <scope>test</scope>
    </dependency>
    <!-- without this PowerMock tests don't run in maven -->
    <dependency>
        <groupId>jboss</groupId>
        <artifactId>javassist</artifactId>
        <version>3.8.0.GA</version>
        <scope>test</scope>
    </dependency>
person Jeff Fairley    schedule 20.03.2014

Согласно Дипаку,

Решение 1. Добавьте приведенный ниже код в pom.xml.

<plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-surefire-plugin</artifactId>
       <version>2.13</version>
       <dependencies>
            <dependency>
                 <groupId>org.apache.maven.surefire</groupId>
                 <artifactId>surefire-junit47</artifactId>
                 <version>2.13</version>
            </dependency>
       </dependencies>
</plugin>

Для исправления ArtifactId в зависимости вы можете увидеть эту ссылку если вы используете JUnit.

Затем выполните «mvn clean install».

Решение 2. Добавьте приведенный ниже код в pom.xml.

<properties>
    <powermock.version>1.5</powermock.version>
</properties>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-module-junit4</artifactId>
        <version>${powermock.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-api-easymock</artifactId>
        <version>${powermock.version}</version>
        <scope>test</scope>
    </dependency>

Подробнее см. по этой ссылке.

Все заслуги принадлежат Дипаку.

person Jyoti Ranjan    schedule 07.01.2013

Недавно у меня была ситуация, когда тесты PowerMock были запущены, но не включены в отчет о надежном покрытии. Мы обнаружили, что проблема связана с инструментами.

Отмечу, что большинство наших тестов выполняется с помощью TestNG. Как правило, мы используем JUnit только тогда, когда нам нужно использовать PowerMock.

Вот фрагмент POM:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
        <systemPropertyVariables>
            <org.apache.activemq.default.directory.prefix>target/test/</org.apache.activemq.default.directory.prefix>
            <log4j.configuration>file:${project.basedir}/src/test/resources/log4j.properties</log4j.configuration>
            <jacoco-agent.destfile>${project.basedir}/target/jacoco.exec</jacoco-agent.destfile>
        </systemPropertyVariables>
        <argLine>-Xmx512m -XX:MaxPermSize=256m -Djava.awt.headless=true</argLine>
    </configuration>
</plugin>
<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.5.201505241946</version>
    <executions>
        <execution>
            <id>instrument</id>
            <phase>process-classes</phase>
            <goals>
                <goal>instrument</goal>
            </goals>
        </execution>
        <execution>
            <id>restore</id>
            <phase>test</phase>
            <goals>
                <goal>restore-instrumented-classes</goal>
                <goal>report</goal>
            </goals>
        </execution>
    </executions>
</plugin>

<systemPropertyVariables>, вероятно, не имеют отношения к исправлению.

Также обратите внимание, что документация JaCoCo предостерегает от использования этого типа конфигурации, если вы не считаете это необходимым.

http://www.eclemma.org/jacoco/trunk/doc/instrument-mojo.html

Предупреждение. Предпочтительным способом анализа покрытия кода с помощью JaCoCo является инструментирование «на лету». Автономное инструментирование имеет несколько недостатков и должно использоваться только в том случае, если конкретный сценарий явно требует этого режима. Пожалуйста, ознакомьтесь с документацией по автономному инструментированию перед использованием этого режима.

person Jeff Fairley    schedule 09.09.2015