我最近开始学习Arquillian。遵循Geting入门教程,了解了关于远程,嵌入式和托管容器的“容器品种”。我对Arqillian如何处理这些不同的品种感到困惑。
我的问题是:入门教程第一个示例(具有TemparatureConverter)使用JBoss AS 6作为远程容器。我的理解是,包含TemparatureConverter bean的主应用程序存档将部署在JBoss AS 6中(在自己的VM中运行),我的Test类将在一个单独的VM中运行。
我在TemparatureConverter.java中添加了一些日志消息,即Bean类:
public double convertToCelsius(double f) {
System.out.println("@@@@@@@@@@Inside container: convertToCelsius");
return ((f - 32) * 5 / 9);
}
public double convertToFarenheit(double c) {
System.out.println("@@@@@@@@@@Inside container: convertToFarenheit");
return ((c * 9 / 5) + 32);
}
我还在Test类中添加了一些日志消息:
@Test
public void testConvertToCelsius() {
System.out.println("@@@@@@@@@Inside Junit client");
Assert.assertEquals(converter.convertToCelsius(32d), 0d);
Assert.assertEquals(converter.convertToCelsius(212d), 100d);
}
现在我启动了JBoss AS并通过输入命令行运行测试用例:mvn test -Pjbossas-remote-6
我在想我在Bean类中添加的日志消息将打印在JBoss控制台上,我在Test类中添加的日志消息将打印在Maven控制台窗口上,因为这两个东西都在不同的VM中运行
但是没有发生这种情况,我看到所有日志消息都打印在JBoss AS控制台上。
这意味着,我的测试用例和Bean类一起在JBoss AS容器中运行。
如果这是真的,那么这里的偏远地方在哪里?我的意思是,测试用例和bean都在同一个JVM中运行。这类似于“嵌入式容器”行为,不是吗?
我指的是这个解释:
a remote container resides in a separate JVM from the test runner; Arquillian binds to the container to deploy and undeploy the test archive and invokes tests via a remote protocol (typically HTTP)
但是在这种情况下,似乎Arquillian将我的测试用例和Bean类放在同一个JVM中。
如果我的问题不明确,请告诉我?
答案 0 :(得分:2)
是的,Arquillian正在部署您的测试用例类以及目标容器中正在测试的代码。
引用文档:
Arquillian在运行时打包ShrinkWrap定义的存档,并将其部署到目标容器。然后协商测试方法的执行,并使用与服务器的远程通信来捕获测试结果。
因此,就“远程性”而言,Arquillian提供的是一种“远程”启动测试的方法,并将结果呈现给开发人员,就好像它是“本地”运行一样。销售推广是您不必关心部署,并且您可以在自己的开发环境中运行测试。
远程容器和嵌入式容器之间的差异就变成了容器的运行方式。远程意味着在运行测试之前,您的容器与开发环境一起运行。而嵌入式增加了在测试开始时只运行容器的价值。