2009-11-25 12 views
8

Powermockをmavenで実行することができません。私はjUnitテストを動かすためのPowerMock MockitoとPowerMockRunnerです。JuniperとPowerMockをMockitoからPowerMockRunner経由で実行中

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

私は、テストを実行するための特殊なanytingを設定していない:

は、ここでのテストです。私のpomは以下のdepsを参照しています:

  • org.mockito | mockito-all | 1.8.0
  • 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> 

ここで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に移行すると、mvn testでPowerMockテストを実行できます。だから、mavenとjunit/testngのコンボには問題があるようです。

私は両方を実行できるようにしたいと思いますが、方法が見つからない場合は、自分の質問に答えて行きます。 みんなありがとう&ギャル

+0

は( 'junit.framework.TestCase'を延長しない)テストトリガされます'mvn test'を実行するだけですか? –

+0

いいえ、トリガーされません。 –

+0

それから、 '-Dtest'を使用しているとは思わないでください。あなたは別の問題を抱えています(ソースを見つけたようです)。 –

答えて

-1

TestNG & JUnitテストを混在させるときに問題がありました。すべてのテストをJunitに移行すると、私の問題は解決しました。 ありがとうございます。

1

Powermockのセットアップが私に[OK]を見て、jarは細かいようだ(Mavenの推移依存関係が他のpowermockのjarファイルを取得すると仮定すると - 私たちのツタの決意がそれらを取得した後、我々はおよそ6-7を持っている)

のEclipseそれ自身の "内部"のJUnitライブラリを使用している可能性があります。したがって、異なる動作ですか?

テストにはorg.junitという注釈が付きますか?@ Test?

+0

はい、テストに@ org.junit.Testというアノテーションが付けられています –

2

問題を再現できません。

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

そして(輸入スキップ)次のテストクラス::私のpom.xmlに以下の内容で

@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'を投稿してください。私が言ったように、あなたが描写している振る舞いを再現することはできません。そして、あなたは 'mvn test'を実行するときに何を観察しますか? –

+0

あなたが要求したものを掲示しました –

0

Surefireプラグインのソースを調べると、いくつかの不正なものがあります。 Classloader内にTestNGパッケージがあればTestNG TestRunnerを実行します。 JUNitとTestNGの両方のテストがうまく実行されている例はまだありません。

+0

これは2回の実行を使用して可能です。 –

2

私もこの問題を遭遇しましたが、PowerMockの問題ではありませんでした。 My Testクラスの名前はXStaticTests.javaでした。

私は「MVNクリーンテスト」を実行すると、このテストは実行されないだろう、それだけで私は「-Dtest = ...」

を使用してテストを指定したときに確実なドキュメントは、デフォルトでのみ、これらのパターンと述べて走りました "/Test*.java" - すべてのサブディレクトリと、 "Test"で始まるすべてのJavaファイル名が含まれています。 "/Test.java" - すべてのサブディレクトリと、 "Test"で終わるすべてのjavaファイル名を含みます。 " */* TestCase.java" - "TestCase"で終わるすべてのサブディレクトリとすべてのJavaファイル名を含みます。

したがって、クラス名をこれらのいずれかで終わる名前に変更すると、 "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

この解決策は私のために働いた。私はMockito 1.9.5でPowermock 1.6.4バージョンを使用していました。 –

0

私は同じ問題を抱えていました。私のセットアップではjboss.javassistの古いバージョンが使用されていましたが、これは奇妙なことにPowerMockRunnerの動作を妨げていました。

私はJUnit/TestNG環境が混在していることに注意してください。私は以前、複数の確実なプロバイダを追加するというソリューションを試しましたが、どちらもうまくいきませんでした(確かに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> 
関連する問題