0

我最近开始了解 Arquillian。正在关注入门教程,了解了有关远程、嵌入式和托管容器的“容器品种”。我对 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
    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 中。

如果我的问题不清楚,请告诉我?

4

1 回答 1

2

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

引用文档:

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

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

远程容器和嵌入式容器的区别就变成了容器的运行方式。远程意味着您在运行测试之前有一个容器与您的开发环境一起运行。嵌入式增加了在测试开始时仅运行容器的价值。

于 2011-07-06T14:09:56.760 回答