Как протестировать Spring в контейнере сервера приложений с помощью Arquillian?

Мы пытаемся запустить интеграционные тесты кода на основе Spring во встроенном контейнере tomcat с использованием платформы TestNG.

Мы без особого успеха пытались использовать существующее расширение Arquillian Spring. Возможно какая-то недостающая конфигурация. Мы следовали инструкциям из этого поста< /а>

Наш 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 -->

Мы также добавили встроенный профиль Tomcat в наш файл pom.

        <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>

We also tried adding the following lines to our 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, и для этого мы пытаемся внедрить компонент Spring в наш тест.

Проблема в том, что аннотация @SpringConfiguration вообще недоступна. Итак, мы предполагаем, что нам не хватает какой-то конфигурации. Любые подсказки о том, как действовать?


person Daniel Cerecedo    schedule 18.09.2012    source источник


Ответы (1)


Вы используете артефакт arquillian-service-container-spring, который является контейнером Embedded 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

person Aslak Knutsen    schedule 18.09.2012