我想在嵌入式 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 部署中的任何内容。 pom.xml
已经知道 .这包括版本字符串、依赖列表、包或类列表、应用服务器安装目录等。pom.xml
与 IntelliJ。 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 在测试执行期间存在,那么它来自之前的构建并且已经过时了。