我想在嵌入式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部署中的任何内容。pom.xml
已知的测试或arquillian.xml 中对任何进行硬编码。这包括版本字符串,依赖项列表,包或类列表,应用服务器安装目录等。pom.xml
后,需要从IntelliJ 运行测试。JBOSS_HOME
环境变量。理论上,这可以通过Arquillian的Maven解析器,嵌入式容器,@RunAsClient
,maven故障安全插件,一些arquillian.xml
魔法和大量的maven魔法来实现。但实际上,我不能让这些东西一起工作,也没有找到任何适当的文档来覆盖这个场景,所以我希望有人能清楚地展示它们如何协同工作。
答案 0 :(得分:3)
绝对听起来像ShrinkWrap Resolver Maven Importer的情况(不要与Maven Resolver混淆)。 Here是一些显示其用法的测试。
我只有一个Gradle Importer案例的独立样本(我知道您正在使用maven),但测试结构类似于here。
我目前没有公开提供@RunAsClient
和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部署?战争是在测试执行后创建的,这意味着如果战争在测试执行期间存在,那么它就来自之前的构建并且已经过时。