2009-11-25 5 views
8

Я не могу запустить Powermock через maven. Я - PowerMock Mockito и PowerMockRunner для запуска теста jUnit.Запуск Junit & PowerMock с помощью Mockito через PowerMockRunner от maven

Вот тест:

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

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

  • org.mockito | mockito-all | 1.8.0
  • junit | junit | 4.6.0
  • org.powermock.modules | powermock-module-junit4 | 1.3.1
  • org.powermock.api | Полимер-апи-мокито | 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> 

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

МВН -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.


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

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

+0

ли тест (не распространяющие 'junit.framework.TestCase') срабатывающие когда вы просто запускаете 'mvn test'? –

+0

Нет, это не срабатывает. –

+0

Тогда даже не ожидайте, что это произойдет при использовании '-Dtest'. У вас есть другая проблема (и похоже, что вы нашли источник). –

ответ

-1

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

1

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

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

Являются ли тесты аннотированными с org.junit. @ Test?

+0

Да, тесты аннотируются с @ org.junit.Test –

2

Я не могу воспроизвести вашу проблему. С следующего содержания в моем 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?

+0

Да, у меня есть много тестов, аннотированных с @ org.junit.Test. –

+0

Тогда отправьте свой 'pom.xml'. Как я уже сказал, я не могу воспроизвести описанное вами поведение. И BTW, что вы наблюдаете, когда вы запускаете «mvn test»? –

+0

Опубликованы, что вы просили –

0

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

+0

Это возможно, используя два исполнения. –

2

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

Когда я запускаю «МВНЫ чистый тест», этот тест не будет работать, он побежал только тогда, когда я указал тест с использованием «-Dtest = ...»

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

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

12

У меня просто была эта ошибка и работал через решение. Мой 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> 

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

+0

Это решение сработало для меня. Я использовал версию Powermock 1.6.4 с Mockito 1.9.5. –

0

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

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

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

 <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> 

... и соответствующие Deps тестирования ...

<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>