Arquillian Chameleon的诞生是为了简化Arquillian测试的配置。 我很自豪地宣布,使用1.0.0.CR2版本,我们不仅简化了Arquillian测试的配置方式,而且简化了编写方式。
在此新版本中,添加了三个新的简化:
- 您只需要使用1个(或最多2个依赖项,以防您想使用自动部署功能)
- 不必添加任何依赖关系来定义要用于运行测试的应用程序服务器。 甚至不必使用arquillian.xml文件来定义它。
- 不必使用ShrinkWrap来构建您的程序包。 您仍然可以使用它,但是可以将创建程序包的过程委托给自定义SPI。
因此,让我们开始吧。
相依性
您只需要添加一个依赖关系,而不再需要添加Arquillian依赖关系+容器依赖关系。
<dependency><groupId>org.arquillian.container</groupId><artifactId>arquillian-chameleon-junit-container-starter</artifactId><version>${arquillian.chameleon.version}</version><scope>test</scope>
</dependency>
容器的定义
@RunWith(ArquillianChameleon.class)
@ChameleonTarget("wildfly:11.0.0.Final:managed")
public class GameResourceRestApiTest {
}
您只需要使用ArquillianChameleon运行器和特殊注释@ChameleonTarget来定义要使用的容器。 在此示例中,配置了具有托管模式的Wildfly 11 。
运行此测试时,将使用Arquillian Wildfly依赖项配置classpath,下载应用程序服务器,然后像其他Arquillian测试一样运行。
您可以在https://github.com/arquillian/arquillian-container-chameleon#arquillian-chameleon-runner中了解有关此功能的更多信息。
自动部署
Arquillan允许您定义Java SPI来描述应如何创建档案。 这实际上意味着,如果您提供自动创建部署文件的实现,则不需要@Deployment方法。
Arquillian Chameleon目前提供两种实现:
- 文件,该文件部署已创建的文件。 您需要设置文件的位置。
- 它运行使用嵌入的Maven该项目的构建和生成的存档Maven是作为部署档案库。
对于本示例,我将以多模块项目为例,但是请注意,如果您创建一个无多模块项目,则默认设置可以完美地工作。
<dependency><groupId>org.arquillian.container</groupId><artifactId>arquillian-chameleon-maven-build-deployment</artifactId><version>${arquillian.chameleon.version}</version><scope>test</scope>
</dependency>
@RunWith(ArquillianChameleon.class)
@ChameleonTarget("wildfly:11.0.0.Final:managed")
@MavenBuild(pom = "../../pom.xml", module = "gamepage/impl")
@DeploymentParameters(testable = false)
public class GameResourceRestApiTest {@ArquillianResourceURL url;
}
注意,根据您选择的方法( File或Maven ),您需要在类路径上添加实现。
在这种情况下,我选择使用Maven方法,这意味着归档是通过构建所有项目来生成的。
由于该示例,此测试特定于两件事,需要对其进行自定义(而不是默认设置)。
第一个是pom位置。 默认情况下, @ MavenBuild批注使用执行测试的pom.xml。 对于多模块项目,您不想从定义测试的模块运行构建,而要从项目的根目录运行,因此您将获得一个包含所有依赖项的完整档案。 对于这种情况,您需要将其设置在何处。
第二个是生成用于部署的存档的位置。 默认情况下,您无需指定任何内容,因为在没有多模块项目的情况下,您仅生成一个文件。 但是对于多模块项目,您将生成多个归档,因此需要指定哪个模块包含最终归档。
就是这样,当您运行此测试时, Arquillian将下载Wildfly,启动它,运行构建以获取最终的部署文件(例如.war),对其进行部署并最终运行该测试。
请注意,还没有强制使用@DeploymentParameters批注,但允许您像使用@Deployment批注那样配置部署,例如设置部署名称或将容器(默认容器)的模式更改为作为客户。
您可以在以下位置看到完整的示例: https : //github.com/lordofthejars/games-monolith/blob/master/gamepage/impl/src/test/java/org/lordofthejars/games/game/GameResourceRestApiTest.java
您也可以在https://github.com/arquillian/arquillian-core/blob/master/docs/deployment-archives.adoc#deployment-archives-using-java-spi上了解有关自动部署功能的更多信息。
结论
您会看到一切都已简化很多。 这个想法是为了提供您在运行Spring测试时获得的类似体验。
我们不断学习,
亚历克斯
翻译自: https://www.javacodegeeks.com/2018/03/arquillian-chameleon-simplifying-your-arquillian-tests.html