Работает с JUnit & PowerMock с Mockito через PowerMockRunner с помощью Maven
Я не могу запустить Powermock через maven. Я PowerMock Mockito и PowerMockRunner для вождения теста jUnit.
вот тест:
@RunWith(PowerMockRunner.class)
@PrepareForTest( { UserLocalServiceUtil.class, ExpandoBridge.class })
public class AlertNotificationsTest {
//...
Я не настроил ничего особенного для запуска теста. Мой pom ссылается на следующие deps:
- org.mockito | mockito-все | 1.8.0
- junit | junit / 4.6.0
- org.powermock.модули / powermock-module-junit4 | 1.3.1
- org.powermock.api / powermock-api-mockito / 1.3.1
когда я запускаю mvn -Dtest=AlertNotificationsTest test
mvn говорит, что нет теста для запуска.
Но если я запускаю тот же тестовый класс из eclipse, все работает нормально.
Я делаю что-то не так?
вот мой помпон.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:DevelJavaEP_PORTALinformation-providertargetsurefi
-------------------------------------------------------
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
класс extend 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 ответов
у меня просто была эта ошибка и я работал через решение. Мой помпон.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.Ява.
когда я запускаю "mvn clean test", этот тест не будет запускаться, он запускается только тогда, когда я указал тест с помощью " - Dtest=..."
в документации surefire упоминается, что по умолчанию выполняется поиск только этих шаблонов : "/проверки*.java "- включает все свои подкаталоги и все имена файлов java, которые начинаются с "Test". "/
настройка Powermock выглядит нормально для меня, и банки кажутся прекрасными (предполагая, что транзитивные зависимости maven получают другие банки powermock - у нас есть около 6-7 после того, как наше решение плюща получает их)
Eclipse может использовать свою собственную" внутреннюю " библиотеку JUnit, таким образом, различные модели поведения ?
тест аннотируется с помощью org.тесты JUnit.@ Test ?
Если вы посмотрите на источник плагина Surefire, он делает некоторые подлые вещи. Если он найдет какие-либо пакеты TestNG в загрузчике классов, он предпочтет запустить TestNG TestRunner. Я еще не видел примеров того, как тесты JUNit и TestNG работают бок о бок.
у меня была такая же проблема, и мне потребовалось некоторое время, чтобы выяснить. Моя установка потянула старую версию jboss.javassist, который странно мешал PowerMockRunner работать вообще.
стоит отметить, что у меня также есть смешанная среда JUnit / TestNG. Ранее я пробовал решение добавления нескольких поставщиков surefire, и это тоже не сработало (используя 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>
возникла проблема при смешивании тестов TestNG и JUnit. Миграция всех тестов в Junit решила мою проблему. Спасибо, ребята.