【问题标题】:Maven test fails within install phase but is ok within test phaseMaven 测试在安装阶段失败,但在测试阶段没问题
【发布时间】: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


【解决方案1】:

对于集成测试,maven-failsafe-plugin 负责,而不是 maven-surefire 插件。所以你忽略集成测试的配置是行不通的。

【讨论】:

  • 我不确定这个=) 我可以将 skipTests=true 添加到 maven-failsafe-plugin 配置中,它不会有所不同
  • 因为我认为您没有正确配置 maven-failsafe-plugin。
  • 我想这里根本不需要故障保护
【解决方案2】:

您在故障安全插件文档中看到这个FAQ entry 了吗?它为类加载配置提供了一大堆选项。

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

【讨论】:

    猜你喜欢
    • 2016-03-08
    • 2014-11-27
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 2012-01-04
    • 2023-03-23
    • 2011-10-26
    • 1970-01-01
    相关资源
    最近更新 更多