Вопрос

Я не могу запустить Powermock через maven.Я PowerMock Mockito и PowerMockRunner для проведения теста JUnit.

Вот этот тест:

@RunWith(PowerMockRunner.class)
@PrepareForTest( { UserLocalServiceUtil.class, ExpandoBridge.class })
public class AlertNotificationsTest {
//...

Я не настроил ничего специального для запуска теста.Мой pom ссылается на следующие deps:

  • org.mockito | мокито-все | 1.8.0
  • junit | junit | 4.6.0
  • org.powermock.modules | powermock-module-junit4 | 1.3.1
  • org.powermock.api | powermock-api-mockito | 1.3.1

когда я бегу mvn -Dtest=AlertNotificationsTest test mvn говорит, что нет теста для запуска.Но если я запускаю тот же тестовый класс из eclipse, все работает нормально.

Я делаю что-то не так?


Вот мой pom.xml ниже (соответствующие части)

    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>5.9</version>
        <classifier>jdk15</classifier>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.6</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.8.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock.modules</groupId>
        <artifactId>powermock-module-junit4</artifactId>
        <version>1.3.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock.api</groupId>
        <artifactId>powermock-api-mockito</artifactId>
        <version>1.3.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Вот выходные данные из maven

mvn -Dtest=тест AlertNotificationsTest на оповещение

...
[INFO] Surefire report directory: C:\Devel\Java\EP_PORTAL\information-provider\target\surefi

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running TestSuite
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.313 sec

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] No tests were executed!  (Set -DfailIfNoTests=false to ignore this error.)
[INFO] ------------------------------------------------------------------------

Примечание:Я могу запускать другие тесты, я просто не могу запустить этот тест.Если я сделаю AlertNotificationsTest расширение класса junit.framework.TestCase класс подхватывается maven, но кажется, что он не управляется PowerMockRunner.

Вот результат этого:


Running TestSuite
[ERROR]: No test suite found.  Nothing to run
Tests run: 4, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 1.053 sec <<< FAILURE!

Results :

Failed tests:
  testSingleEventNotification(pt.estradasportugal.traffic.services.events.AlertNotificationsTest)
  testTwoEventNotification(pt.estradasportugal.traffic.services.events.AlertNotificationsTest)

Tests run: 4, Failures: 2, Errors: 0, Skipped: 0

Опять же, эти тесты отлично работают с Eclipse.


Обновить Я нашел возможную проблему и обходной путь.У меня есть тесты с TestNG и JUnit.Если я удалю TestNG из своего pom и перенесу все свои тесты в JUnit, я смогу запустить свой тест PowerMock с mvn test.Итак, похоже, что есть проблема с maven и комбинацией junit / testng.

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

Это было полезно?

Решение 7

Возникла проблема при смешивании обоих тестов TestNG и JUnit.Перенос всех тестов в Junit решил мою проблему.Спасибо, ребята.

Другие советы

У меня только что была эта ошибка, и я проработал решение.Мой файл pom.xml имел следующую зависимость:

<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-mockito-release-full</artifactId>
  <version>1.5</version>
  <classifier>full</classifier>
  <scope>test</scope>
</dependency>

Проблема возникает из-за того, что мой код использует JUnit, а вышеупомянутая зависимость имеет внешнюю зависимость от TestNG.Это останавливало выполнение моего теста.Почему я не знаю - вы бы сделали это, хотя тестовый фреймворк был бы протестирован немного лучше!!!

В любом случае, решение состояло в том, чтобы разбить "полные" зависимости только на те, которые требуются:

<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-api-mockito</artifactId>
  <version>1.5</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-core</artifactId>
  <version>1.5</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-module-junit4</artifactId>
  <version>1.5</version>
  <scope>test</scope>
</dependency>

Это решило проблему.Кстати, я использовал mvn dependency:tree чтобы понять связанные зависимости.

Я не могу воспроизвести вашу проблему.Со следующим содержанием в моем pom.xml:

  <repositories>
    <repository>
      <id>powermock-repo</id>
      <url>http://powermock.googlecode.com/svn/repo/</url>
    </repository>
  </repositories>
  <properties>
    <powermock.version>1.3.1</powermock.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.powermock.modules</groupId>
      <artifactId>powermock-module-junit4</artifactId>
      <version>${powermock.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.powermock.api</groupId>
      <artifactId>powermock-api-mockito</artifactId>
      <version>${powermock.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.6</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-all</artifactId>
      <version>1.8.0</version>
    </dependency>
  </dependencies>

И следующий тестовый класс (пропуская импорт):

@RunWith(PowerMockRunner.class)
@PrepareForTest( { App.class })
public class AppTest {
    @Test
    public void testApp() {
        assertTrue(true);
    }
}

Выполняется mvn test -Dtest=AppTest просто работает нормально и выдает мне следующий вывод:

...
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.mycompany.app.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.135 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Wed Nov 25 17:34:32 CET 2009
[INFO] Final Memory: 9M/79M
[INFO] ------------------------------------------------------------------------

Итак, вопрос в том,:есть ли у вас метод, снабженный аннотацией @Test в AlertNotificationsTest?

Я тоже столкнулся с этой проблемой, но это не проблема PowerMock.Мой тестовый класс был назван XStaticTests.java .

Когда я запускаю "mvn clean test", этот тест не запускается, он запускается только тогда, когда я указываю тест, используя "-Dtest=..."

В документации surefire упоминается, что по умолчанию выполняется поиск только по этим шаблонам :"/Test*.java" - включает все его подкаталоги и все имена файлов Java, которые начинаются с "Test"."/Test.java " - включает все его подкаталоги и все имена файлов Java, которые заканчиваются на "Test"."*/*TestCase.java " - включает все его подкаталоги и все имена файлов Java, которые заканчиваются на "TestCase".

Поэтому изменение имени класса на то, которое заканчивается одним из них, будет выполняться при вызове "mvn test", иначе плагин surefire должен быть настроен специально для имени класса.

Настройка Powermock выглядит для меня нормально, и банки кажутся прекрасными (предполагая, что переходные зависимости maven получают другие банки powermock - у нас есть около 6-7 после того, как их получит наша ivy resolve)

Eclipse, возможно, использует свою собственную "внутреннюю" библиотеку JUnit, следовательно, различное поведение?

Снабжен ли тест аннотациями org.junit.@Test ?

Если вы заглянете в исходный код плагина Surefire, он делает некоторые хитрые вещи.Если он обнаружит какие-либо пакеты TestNG в Classloader, он выберет запуск TestNG TestRunner.Я еще не видел ни одного примера параллельной работы тестов JUnit и TestNG.

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

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

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

        <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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top