wildfly - 如何通过将整个 war 部署到 WildFly 嵌入式来设置 arquillian 来测试 maven war 项目?

标签 wildfly jboss-arquillian shrinkwrap

我想在嵌入式 WildFly 实例上对我的 war 进行宏观(而不是微观!)黑盒测试。

我的 Maven 项目看起来像这样

<project>
  ...
  <packaging>war</packaging>

  <!-- Lots of classes in src/main/webapp and files in src/main/webapp -->
  <dependencies>
    <!-- Lots of compile/runtime dependencies that change very frequently -->
    <!-- Lots of test dependencies that change very frequently -->
  </dependencies>
</project>

我的 arquillian 测试需要满足以下要求:
  • 部署全战到测试中的应用服务器。这包括所有生产类、所有运行时依赖项和所有 src/main/webapp文件。从维护的角度来看,进行微部署是不可能的,因为类依赖和 jar 依赖变化非常频繁。因此,我们无法枚举 ShrinkWrap 部署中的任何内容。
  • 不要硬编码任何东西在测试或 arquillian.xml maven pom.xml 已经知道 .这包括版本字符串、依赖列表、包或类列表、应用服务器安装目录等。
  • 不要使用超过 1 个 maven 模块 .我测试我的 war 的测试属于产生 war 的同一个 Maven 模块的测试文件夹中。
  • checkout 我的代码的用户需要能够简单地运行测试:
  • 测试需要从 IntelliJ 运行只需打开 pom.xml与 IntelliJ。
  • 使用WildFly嵌入式容器,所以什么都不需要先安装,没有进程需要先运行肯定没有 JBOSS_HOME需要设置环境变量第一的。
  • 我只对黑盒测试感兴趣,所以我所有的测试都可以作为客户端运行。

  • 理论上,这一切都可以通过 Arquillian 的 Maven 解析器、嵌入式容器、@RunAsClient , maven 故障安全插件, 一些 arquillian.xml魔法和很多 Maven 魔法。但在实践中,我无法让这些东西一起工作,也找不到任何能体面地涵盖这种情况的文档,所以我希望有人能清楚地展示他们如何一起工作。

    最佳答案

    绝对听起来像是 ShrinkWrap Resolver Maven Importer 的案例(不要与 Maven 解析器混淆)。 Here是一些显示其用法的测试。

    我有一个独立样本,仅用于 Gradle Importer 的案例(我知道您使用的是 maven ),但测试结构类似 here .

    我目前没有公开的完整示例 @RunAsClient和 Maven 导入器,但我有一个项目将它们与 Graphene 一起使用这种组合确实有效:)。通常,测试应如下所示:

    @RunWith(Arquillian.class)
    public class SomeControllerIT {
    
        @Deployment
        public static WebArchive createDeployment() {
            return ShrinkWrap.create(MavenImporter.class).loadPomFromFile("pom.xml").importBuildOutput()
                .as(WebArchive.class);
        }
    
        @Test
        @RunAsClient
        public void shouldDoSth() throws Exception {
          ...
       }
    }
    

    为什么使用 Maven Importer 而不是 war 部署? war 是在测试执行之后创建的,这意味着如果 war 在测试执行期间存在,那么它来自之前的构建并且已经过时了。

    关于wildfly - 如何通过将整个 war 部署到 WildFly 嵌入式来设置 arquillian 来测试 maven war 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32457712/

    相关文章:

    jsf - Wildfly 以错误开始。 javax.faces.FacesException : Unable to find CDI BeanManager

    java - 我的代码可以在没有正常字体模式的情况下登录到 Wildfly 控制台(占用线路)吗?

    jms - 使用 Wildfly 进行批处理/批量消息 (JMS) 处理

    jsf - RichFaces 4.5.2.Final Calendar 页面片段破坏了 4.5.1 成功的 Arquillian 单元测试

    java - Selenium 、Arquillian、Eclipse : trying to make test wait until the page is fully loaded

    java - 如何阻止 jbossshrinkwrap 远程解决依赖关系?

    java - 使用 ShrinkWrap 找不到 test-persistence.xml

    maven - 无法在 Glassfish 上运行 Arquillian 测试用例

    java - Wildfly 不断重定向本地主机 :8080/app to localhost:8080/app/ending in 403 error

    intellij-idea - 如何使用 IntelliJ IDEA 和 Wildfly Swarm 运行 Arquillian 测试