8

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

我的 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 部署中的任何内容。
  • 不要在 test 或 arquillian.xml中对 maven 已知的pom.xml任何内容进行硬编码。这包括版本字符串、依赖列表、包或类列表、应用服务器安装目录等。
  • 不要使用超过 1 个 maven 模块。我测试我的战争的测试属于产生战争的同一个 Maven 模块的测试文件夹中。
  • 签出我的代码的用户需要能够简单地运行测试:
    • 只需使用 IntelliJ 打开后,测试需要从 IntelliJ 运行pom.xml
    • 使用 WildFly 嵌入式容器,所以不需要先安装任何东西,不需要先运行任何进程,也绝对不需要JBOSS_HOME先设置环境变量
  • 我只对黑盒测试感兴趣,所以我所有的测试都可以作为客户端运行

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

4

1 回答 1

3

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

我有一个独立的示例,仅用于Gradle Importer的一个案例(我知道您使用的是 maven),但这里的测试构造类似。

我目前没有@RunAsClient与 Maven Importer 和 Maven Importer 一起公开的完整示例,但我有一个项目将它们一起使用,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 部署?战争是在测试执行之后创建的,这意味着如果战争在测试执行期间存在,那么它来自以前的构建并且已经过时。

于 2015-09-08T12:42:32.090 回答