путь к классам необходим на этапе надежного тестирования, когда аркиллиан недоступен

Сценарий:

I am currently trying to develop unit test inside java ee application using arquillian. As a test container I use a remote container running on a wildfly server. The setup is working for test as long as the source classes needed are inside the test directory.

Проблема:

Once the classes I want to perform test upon are outside the test directory the class loader does not recognize them anymore and I can no longer add them to the micro-deployment using shrinkWrap as I have done previously.

что я делаю не так, что я забываю? Я чувствую, что это может быть очень простая проблема с настройкой внутри моего проекта, поскольку я также новичок в maven и java ee. Поскольку установка, похоже, работает, пока все ресурсы находятся внутри тестового каталога, я предполагаю, что ошибка не является проблемой зависимости, а скорее проблемой с настройкой моего проекта. Это мой первый вопрос по stackoverflow, прошу прощения за любые недостатки с моей стороны: D

Сообщение об ошибке

    Could not invoke deployment method: public static org.jboss.shrinkwrap.api.spec.JavaArchive de.mathplan.moses.core.studiengang.model.StudiengangTest.createDeployment()
        at org.jboss.shrinkwrap.api.asset.ClassLoaderAsset.<init>(ClassLoaderAsset.java:70)
        at org.jboss.shrinkwrap.impl.base.URLPackageScanner.foundClass(URLPackageScanner.java:165)
        at org.jboss.shrinkwrap.impl.base.URLPackageScanner.handle(URLPackageScanner.java:157)
        at org.jboss.shrinkwrap.impl.base.URLPackageScanner.handle(URLPackageScanner.java:145)
        at org.jboss.shrinkwrap.impl.base.URLPackageScanner.scanPackage(URLPackageScanner.java:113)
        at org.jboss.shrinkwrap.impl.base.container.ContainerBase.addPackage(ContainerBase.java:1520)
        at org.jboss.shrinkwrap.impl.base.container.ContainerBase.addPackages(ContainerBase.java:1497)
        at org.jboss.shrinkwrap.impl.base.container.ContainerBase.addClasses(ContainerBase.java:1358)
        at org.jboss.shrinkwrap.impl.base.container.ContainerBase.addClass(ContainerBase.java:1285)
        at de.mathplan.moses.core.studiengang.model.StudiengangTest.createDeployment(StudiengangTest.java:18)
    ]]></error>

Аркиллианские зависимости

<!-- inside profile -->
    <dependency>
         <groupId>org.wildfly.arquillian</groupId>
         <artifactId>wildfly-arquillian-container-remote</artifactId>
         <version>3.0.1.Final</version>
         <scope>test</scope>
    </dependency>
       <dependency>
            <groupId>org.jboss.arquillian.junit</groupId>
            <artifactId>arquillian-junit-container</artifactId>
            <version>1.7.0.Alpha5</version>
            <scope>test</scope>
        </dependency>
        <!-- client deployment APIs for communicating with the container process -->
        <dependency>
            <groupId>org.jboss.arquillian.protocol</groupId>
            <artifactId>arquillian-protocol-servlet</artifactId>
            <version>1.4.0.Final</version>
            <scope>test</scope>
        </dependency>

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.jboss.arquillian</groupId>
                <artifactId>arquillian-bom</artifactId>
                <version>1.4.0.Final</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>

person ammon    schedule 08.12.2020    source источник


Ответы (1)


Вам необходимо настроить файл arquillian.xml, который хранится в папке src / test / resources.

Пример этого файла следующий:

<?xml version="1.0" encoding="UTF-8"?>
<!--
    JBoss, Home of Professional Open Source
    Copyright 2017, Red Hat, Inc. and/or its affiliates, and individual
    contributors by the @authors tag. See the copyright.txt in the
    distribution for a full listing of individual contributors.

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<arquillian xmlns="http://jboss.org/schema/arquillian" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://jboss.org/schema/arquillian
    http://jboss.org/schema/arquillian/arquillian_1_0.xsd">

    <!-- Force the use of the Servlet 3.0 protocol with all containers, as it is the most mature -->
    <defaultProtocol type="Servlet 3.0" />

    <!-- Uncomment to have test archives exported to the file system for inspection -->
    <!--<engine>
        <property name="deploymentExportPath">target/</property>
    </engine>-->

    <!-- Example configuration for a managed WildFly / JBoss EAP instance -->
    <container qualifier="managed">
        <!-- By default, Arquillian will use the JBOSS_HOME environment variable to find the WildFly / JBoss EAP installation.
             If you prefer not to define the JBOSS_HOME environment variable, alternatively you can uncomment the
             following `jbossHome` property and replace EAP_HOME with the path to your WildFly / JBoss EAP installation. -->
        <!--<configuration>
            <property name="jbossHome">EAP_HOME</property>
        </configuration> -->
    </container>
    
    <!-- Example configuration for a remote WildFly / JBoss EAP instance -->
    <container qualifier="remote">
        <!-- Arquillian will deploy to this WildFly server. -->
        <configuration>
            <property name="managementAddress">127.0.0.1</property>
            <property name="managementPort">9990</property>
            <!-- If deploying to a remote server, you have to specify username/password here -->
            <!-- <property name="username">admin</property>
            <property name="password">admin</property> -->
        </configuration>
    </container>
</arquillian>

Квалификатор remote внутри arquillian.xml используется при настройке maven-failsafe-plugin следующим образом:

   <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>${version.failsafe.plugin}</version>
        <executions>
            <execution>
                <goals>
                    <goal>integration-test</goal>
                    <goal>verify</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <!-- Configuration for Arquillian: -->
            <systemPropertyVariables>
                <!-- Defines the container qualifier in "arquillian.xml" -->
                <arquillian.launch>remote</arquillian.launch>
            </systemPropertyVariables>
        </configuration>
    </plugin>

Для запуска интеграционного теста вы можете использовать:

$ mvn verify
person user2862981    schedule 05.01.2021