关于Arquillian进行远程测试的基本问题

时间:2011-06-16 18:07:59

标签: dependency-injection cdi jboss-weld jboss-arquillian

我最近开始学习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中。

如果我的问题不明确,请告诉我?

1 个答案:

答案 0 :(得分:2)

是的,Arquillian正在部署您的测试用例类以及目标容器中正在测试的代码。

引用文档:

  

Arquillian在运行时打包ShrinkWrap定义的存档,并将其部署到目标容器。然后协商测试方法的执行,并使用与服务器的远程通信来捕获测试结果。

因此,就“远程性”而言,Arquillian提供的是一种“远程”启动测试的方法,并将结果呈现给开发人员,就好像它是“本地”运行一样。销售推广是您不必关心部署,并且您可以在自己的开发环境中运行测试。

远程容器和嵌入式容器之间的差异就变成了容器的运行方式。远程意味着在运行测试之前,您的容器与开发环境一起运行。而嵌入式增加了在测试开始时只运行容器的价值。