java—在surefire测试阶段需要类路径,arquillian不可访问

j2qf4p5b  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(358)

场景:

我目前正在尝试使用arquillian在javaee应用程序中开发单元测试。作为测试容器,我使用在wildfly服务器上运行的远程容器。只要所需的源类在test目录中,安装程序就可以用于test。

问题:

一旦我要对其执行测试的类在测试目录之外,类加载器就不能再识别它们,并且我不能再像以前那样使用包覆面提取将它们添加到微部署中。
我做错了什么,忘记了什么?我觉得在我的项目中这可能是一个非常简单的设置问题,因为我对maven和javaee也是新手。由于只要所有资源都在test目录中,安装程序似乎就可以工作,所以我假设这个错误不是依赖性问题,而是我的项目设置的问题。这是我在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>
q9rjltbz

q9rjltbz1#

您必须配置存储在src/test/resources文件夹中的arquillian.xml文件。
此文件的示例如下:

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

配置maven failsafe插件时,使用arquillian.xml中的限定符“remote”,如下所示:

<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

相关问题