Maven测试在安装阶段失败,但在测试阶段是可以的

时间:2012-10-01 09:57:57

标签: testing maven integration integration-testing ebean

我有一个使用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报告 - 在两种情况下,testsuite中的“属性”部分都相同。

跳过集成测试也是一种可接受的解决方案。

  

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”并比较了测试类的条件: 在第一种情况下

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

在第二种情况下

[DEBUG]   PATH\MODULE\target\classes

这就是为什么Ebean找不到类

2 个答案:

答案 0 :(得分:0)

对于集成测试,maven-failsafe-plugin负责而不是maven-surefire插件。因此,忽略集成测试的配置无法正常工作。

答案 1 :(得分:0)

您是否在故障安全插件文档中看到此FAQ entry?它为类加载配置提供了大量选项。

如果这些建议都不适合您,并且跳过集成测试是可以的(如您所述),那么-DskipITs=true应该按照docs进行。