【发布时间】:2012-09-22 04:10:23
【问题描述】:
我有一个使用 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 配置修复
<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,使用参数 -Dskip.integration.test=true 运行,但没有区别,我感觉这个插件根本没有调用。
我还比较了“mvn clean test”和“mvn clean verify”生成的surefire-reports——测试套件中的“properties”部分在这两种情况下都是相同的。
跳过集成测试也是一种可接受的解决方案。
Maven 2.2.1 OS - 在 Windows 和 Debian 下测试
如果有帮助的话,stacktrace of error:
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 找不到类的原因
【问题讨论】:
-
嗯,failsafe 和 surefire 不使用相同的测试类,所以集成测试类和单元测试类是不一样的。这是哪个,是单元测试类还是集成测试类?您也可以让我们知道异常堆栈跟踪等。
-
我知道 IT 测试和单元测试是不同的东西,我想让它成为普通的单元测试。我在项目中根本没有 IT 测试。
-
我的意思是故障安全插件将绑定到 *IT.java 而surefire将绑定到 *Test.java -> 你不会同时拥有两者,所以我没有如果您只有 *Test.java 测试,请认为这是问题所在。您能否在打开调试标志
mvn -X的情况下运行 maven,看看它是否提供了任何新信息? -
在有关 mvn -X 结果的问题中添加了信息,谢谢
-
嗯.. 你能详细说明为什么你认为这是 ebean 找不到课程的原因吗?他们不应该同时与两者一起工作吗?我认为拼图中还有很多缺失的部分。为什么你有空的测试?你为什么在空测试中扩展springbase? spring-context.xml 中有什么?
标签: testing maven integration integration-testing ebean