2012-10-01 106 views
3

我与春天有和EbeanMaven的测试中失败安装阶段,但测试阶段内确定

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

public class SomeTest extends SpringBase { 

    @Test 
    public void emptyTest() {} 
} 

一个空的Java测试我有类装载了一个问题:

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

问题已解决与pom配置

<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”失败,出现严重问题eption 我想这是因为集成测试阶段。 我试图在maven-failsafe-plugin中配置useSystemClassLoader,使用param -Dskip.integration.test = true运行,但没有什么区别,我感觉这个插件根本没有调用。

此外,我还比较了由“mvn clean test”和“mvn clean verify”产生的surefire-reports - 测试套件中的部分“属性”在两种情况下都是相同的。

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

Maven 2.2.1 OS - Tested under Windows and 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全新安装-X” 和 “MVN干净的测试-X” 比较试验classpathes: 在第二种情况下第一壳体

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

[DEBUG] PATH\MODULE\target\classes 

这就是为什么Ebean找不到类

+0

um,故障安全和surefire不使用相同的测试类,所以集成测试类和单元测试类是不一样的。这是一个单元测试课程还是集成测试课程?你也可以让我们知道异常堆栈跟踪等。 – eis

+0

我知道IT测试和单元测试是不同的东西,我想使它成为通常的单元测试。项目中根本没有IT测试。 –

+0

我的意思是,故障安全插件将绑定到* IT.java,其中surefire将绑定到* Test.java - >您不会同时拥有两个,所以我不认为这是问题,如果你只有* Test.java测试。 你可以用'mvn -X'上的调试标志运行maven,看它是否发出任何新信息? – eis

回答

0

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

+0

我不知道这=)我可以添加skipTests = true到maven-failsafe-plugin配置,它不会产生不同 –

+0

因为我认为你没有正确配置maven-failsafe-plugin。 – khmarbaise

+0

我想这里根本不需要故障安全 –

0

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

如果这些建议都不适合你,并且跳过集成测试是可以的(正如你所提到的那样),那么-DskipITs=true应该按照docs来做。