Arquillian Spring Tomcat 7嵌入式 - 模拟@Configuration类

时间:2015-08-11 14:03:58

标签: java spring tomcat jboss-arquillian

我正在开发一个多模块maven项目,我正在尝试将arquillian集成到其中以简化开发并创建一些集成测试。 我使用嵌入式Tomcat 7,我得到了一切可行的地方。 现在我想要一个在服务中注入的类被模拟。当我调试(使用Intellij Idea)时,一切似乎都运行良好......我的测试@Configuration类(ApplicationConfig2)被添加到WAR中,它会注入一个Dummy对象,该对象稍后由服务使用。 问题是当使用maven(clean install)运行相同的测试时(surefire插件),它告诉我发生了错误。 这是我的部署:

@Deployment(testable = false)
public static WebArchive createTestArchive() {
    File[] files = Maven.resolver()
            .offline()
            .loadPomFromFile("pom.xml")
            .resolve("org.glassfish.jersey.containers:jersey-container-servlet-core:2.6",
                    "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.3.1"
            )
            .withTransitivity()
            .asFile();

    return ShrinkWrap
            .create(WebArchive.class, "ROOT.war")
            .addClass(Controller.class)
            .addClass(Service.class)
            .addClass(SomeObjectInterface.class)
            .addClass(MockedSomeObjectImpl.class)
            .addClass(MyApplication2.class)
            .addClass(ApplicationConfig2.class)
            .addClass(MyWebAppInitializer2.class)
            .addAsLibraries(files)
            .setWebXML("in-container-web.xml");
}

这是我在测试中使用的网络应用初始化工具:

@Order(Integer.MIN_VALUE)
public class MyWebAppInitializer2 implements WebApplicationInitializer {...}

我还有另一个名为MyWebAppInitializer,由#34; real" WAR模块。

我得到的错误是:

INFO: Spring WebApplicationInitializers detected on classpath: [foo.MyWebAppInitializer@1e194cf1, foo.MyWebAppInitializer2@f0a71a7, org.glassfish.jersey.server.spring.SpringWebApplicationInitializer@76ab92a7]
Aug 11, 2015 4:50:34 PM org.apache.catalina.core.ApplicationContext log

因此,出于某种原因,即使我不在Web存档中包含类MyWebAppInitializer,它似乎也是由Tomcat加载的,即使是相同的。我检查生成的WAR包,唯一的类是MyWebAppInitializer2(测试版),而不是MyWebAppInitializer。

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

根据我的发现......没有人应该使用嵌入式容器,因为它们不可靠。