spring - 如何使用 Arquillian 在应用服务器容器中测试 Spring?

标签 spring tomcat testng jboss-arquillian

我们正在尝试使用 TestNG 框架在嵌入式 tomcat 容器上运行基于 Spring 的代码的集成测试。

我们尝试使用现有的 Arquillian Spring Extension,但没有取得太大成功。也许缺少一些配置。我们关注了instructions from this post

我们的 pom 包含以下依赖项:

        <dependency>
        <groupId>org.jboss.arquillian</groupId>
        <artifactId>arquillian-bom</artifactId>
        <version>1.0.2.Final</version>
        <scope>test</scope>
        <type>pom</type>
    </dependency>
    <dependency>
        <groupId>org.jboss.arquillian.testng</groupId>
        <artifactId>arquillian-testng-container</artifactId>
        <version>1.0.2.Final</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.8</version>
        <scope>test</scope>
    </dependency>
    <!-- Spring Extension -->
    <dependency>
        <groupId>org.jboss.arquillian.extension</groupId>
        <artifactId>arquillian-service-container-spring</artifactId>
        <version>1.0.0.Beta1</version>
        <scope>test</scope>
    </dependency>
    <!-- testing END -->

我们还在 pom 中添加了 Tomcat 嵌入式配置文件。

        <profile>
        <id>arquillian-tomcat-embedded-7</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <dependencies>
            <dependency>
                <groupId>org.jboss.arquillian.container</groupId>
                <artifactId>arquillian-tomcat-embedded-7</artifactId>
                <version>1.0.0.CR3</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-core</artifactId>
                <version>7.0.30</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
                <version>7.0.30</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-juli</artifactId>
                <version>7.0.30</version>
            </dependency>
            <dependency>
                <groupId>org.eclipse.jdt.core.compiler</groupId>
                <artifactId>ecj</artifactId>
                <version>3.7</version>
                <scope>test</scope>
            </dependency>

            <!-- Weld servlet for testing CDI injections -->
            <dependency>
                <groupId>org.jboss.weld.servlet</groupId>
                <artifactId>weld-servlet</artifactId>
                <version>1.1.9.Final</version>
            </dependency>
        </dependencies>
    </profile>

我们的 arquillian.xml 看起来像...

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<arquillian xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://jboss.org/schema/arquillian"
xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd">

<container qualifier="tomcat" default="true">
    <configuration>
        <property name="unpackArchive">true</property>
    </configuration>
</container>

我们还尝试将以下行添加到我们的 arquillian.xml

<extension qualifier="spring">
    <property name="autoPackage">true</property>
    <property name="springVersion">3.0.0.RELEASE</property>
    <property name="cglibVersion">2.2</property>

    <property name="includeSnowdrop">true</property>
    <property name="snowdropVersion">2.0.3.Final</property>

    <property name="customContextClass">org.jboss.spring.vfs.context.VFSClassPathXmlApplicationContext</property>
</extension>

我们已经创建了一个空测试,并检查嵌入式 Tomcat 是否启动并运行测试。 下一步是验证 Arquillian Spring Extension 是否正常工作,为此我们尝试将 Spring bean 注入(inject)到我们的测试中。

问题是 @SpringConfiguration 注释根本不可用。所以我们猜测我们缺少一些配置。关于如何进行的任何线索?

最佳答案

您正在使用 arquillian-service-container-spring 工件,它是嵌入式 Spring 容器。要将 if 与另一个容器一起使用,您需要使用 arquillian-service-deployer-spring-3 和 arquillian-service-integration-spring-inject 构件。

service-deployer 添加自动添加 Spring 依赖到部署,而 service-integration-spring-inject 在测试用例中添加 @Inject/@Autowire 支持。

参见 https://github.com/arquillian/arquillian-showcase/blob/master/spring/spring-inject/pom.xml#L43

可以在此处找到多个其他示例: https://github.com/arquillian/arquillian-showcase/tree/master/spring

关于spring - 如何使用 Arquillian 在应用服务器容器中测试 Spring?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12480975/

相关文章:

java - Spring - 查找@Scheduled的执行时间

java - Spring @Transactional 在异常时始终回滚事务

spring - 在Spring MVC中,如何获取包括片段的完整请求URL,例如http ://stackoverflow. com/myquestion#test=1234

java - webapplication 是否可以通知 web 容器(例如 Tomcat)正在重新加载、卸载或关闭

使用 Java 进行测试

java - 参数在 TestNG 中传递默认值

java - 使用注释和属性文件中定义的类型的 Spring Autowiring ?

php - 在 apache tomcat 服务器上使用 CakePHP

java - Maven 3 JavaDoc 插件与 TestNG 组冲突

java - intellij 中的 URL myweb_war_exploded 出现问题