2

単体テストを含む Maven プロジェクトがあり、「mvn install」を実行すると大きな例外トレースが発生します。驚くべきことに、このスタックトレースは実際にはタスクの失敗にはなりません! Junitライブラリの可用性に関連しているようです...

1)ライブラリが利用可能になり、テストが実行されるように、このプロジェクトでこれを(明らかに)修正する方法を知りたいです(はい、Junit4はpom.xml依存関係にあります)。

2) これを決定的にデバッグし、根本原因を見つける最善の方法は何ですか?

3) 明らかに確実なユーティリティが厄介な例外をスローしたときに、Maven が「ビルドの成功」と言うのはなぜですか?

org.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.InvocationTargetException; ネストされた例外は java.lang.reflect.InvocationTargetException: null java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect .DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) で java.lang.reflect.Method.invoke(Method.java:597) で org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164) でorg.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110) at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:172) at org.apache.

POMは以下です

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>rudolf</groupId>
    <artifactId>r1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>r1</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>10.9.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>2.4.0a</version>
        </dependency>
    </dependencies>


    <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.9</version>
            <executions>
                <execution>
                    <phase>test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                </execution>
            </executions>
          </plugin>          
          <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-compiler-plugin</artifactId>
             <version>2.3.2</version>
             <configuration>
               <source>1.6</source>
               <target>1.6</target>
             </configuration>
           </plugin>
        </plugins>
    </build>



    <pluginRepositories>
        <pluginRepository>
            <id>onejar-maven-plugin.googlecode.com</id>
            <url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url>
        </pluginRepository>
    </pluginRepositories>
</project>
4

2 に答える 2

3

これは間違いなく愚かさの最悪の状況です。

1)私のテストクラスは、デフォルトの確実な正規表現に従って名前が付けられていません。関連するMavenが実行するJUnitテストを見つけられないを参照してください。したがって、テストは実際には実行されていませんでした。

2)DIDが実行したテストでは、「安全でない」などのクラスを使用して、実際にJVMハッキングが行われ、セグメンテーション違反が発生していました。このセグメンテーション違反は、Mavenビルド全体に影響を及ぼし、Maven出力の結果を破壊します。

持ち帰りのレッスンは次のとおりです。

1)(100%確実ではありませんが、表示されます)-mvnビルド中にJVMで奇妙な低レベルの障害が発生した場合、適切な方法でエラー/障害を単に示さない奇妙な結果が最後に予想される場合があります

2)surefire動作のデフォルトのJunitテストケースは、パッケージ内のすべての@Testメソッドを自動的に実行するだけではありません。クラスに適切な名前を付けるか、surefireパターンフィルターを手動で編集する必要があります。

于 2012-11-07T19:00:35.657 に答える
0

TestNG 統合テスト (フェイルセーフ) でこのような問題に遭遇しました。同様に非常に不可解なエラーにより、丸 1 日を失いました (うーん!- Eclipse/TestNG にお願いします。エラーを報告する場合は、それらを参考にしてください)。私の場合は、テスト メソッドのアクセサーがプライベートであり、パブリックにする必要があったためです。

丸一日が無駄になる前に、他の誰かがこれを役に立つと思ってくれることを願っています。

于 2015-03-30T23:35:45.583 に答える