3

Spring と Ebean を使用した空の Java テストがあります

protected static ApplicationContext ctx;
    @BeforeClass
    public static void initSpringContext() {
        ctx = new ClassPathXmlApplicationContext("spring-context.xml");
    }

public class SomeTest extends SpringBase {

    @Test
    public void emptyTest() {}
}

クラスのロードに問題がありました:

Caused by: javax.persistence.PersistenceException: models.Flat is NOT an Entity Bean registered with this server?

問題は pom config で修正されました

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12.4</version>
    <configuration>
        <useSystemClassLoader>false</useSystemClassLoader>
    </configuration>
</plugin>

この修正の後、「mvn clean test」は正常に実行されますが、「mvn clean install」は正確な例外で失敗します。これは、統合テスト段階のためだと思います。maven-failsafe-plugin で useSystemClassLoader を構成しようとしましたが、param -Dskip.integration.test=true で実行しましたが、違いはありません。このプラグインがまったく呼び出されなかったと感じています。

また、「mvn clean test」と「mvn clean verify」によって生成されたsurefire-reportsを比較しました。テストスイート内の「プロパティ」セクションは、どちらの場合も同じです。

統合テストをスキップすることも、許容できる解決策です。

Maven 2.2.1 OS - Windows および Debian でテスト済み

それが役立つ場合は、エラーのスタックトレース:

Caused by: javax.persistence.PersistenceException: models.Flat is NOT an Entity Bean registered with this server?
    at com.avaje.ebeaninternal.server.core.DefaultServer.createQuery(DefaultServer.java:1008)
    at com.avaje.ebeaninternal.server.core.DefaultServer.createQuery(DefaultServer.java:965)
    at com.avaje.ebeaninternal.server.core.DefaultServer.find(DefaultServer.java:1001)
    at com.avaje.ebean.Ebean.find(Ebean.java:1143)
    at flats.crawler.managers.CrawlerManager.initCrawlerHashes(CrawlerManager.java:25)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:346)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:299)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:132)
    ... 48 more

「mvn clean install -X」と「mvn clean test -X」という 2 つのコマンドを実行し、テスト クラスパスを比較しました。

[DEBUG]   PATH\MODULE\target\MODULE-1.0.jar

2番目の場合

[DEBUG]   PATH\MODULE\target\classes

そのため、Ebean はクラスを見つけることができません

4

2 に答える 2

0

統合テストでは、maven-surefire プラグインではなく、maven-failsafe -pluginが責任を負います。そのため、統合テストを無視する構成は機能しませんでした。

于 2012-10-01T12:46:05.690 に答える
0

フェイルセーフ プラグイン ドキュメントでこのFAQ エントリを見ましたか? クラスローディング構成のオプションがたくさんあります。

これらの提案のいずれもうまくいかず、統合テストをスキップしても問題ない場合は (前述のとおり)、docs-DskipITs=trueに従って実行する必要があります。

于 2012-10-01T19:19:09.390 に答える