1

我已经获得了需要测试的现有 Java 应用程序(我们称之为“WebApp”)的源代码。它作为 WAR 文件部署到 Glassfish 中。这是客户代码,因此如果我能提供帮助,我希望避免修改 WebApp POM。

所以我正在创建一个单独的项目(在 Eclipse 中)来进行测试。新项目需要直接在各种 WebApp 类上调用方法。我尝试将 WAR 文件引用为 Maven 依赖项,但这样做后它不会出现在 Eclipse 的 Maven 依赖项中 - 见下文:

WebApp
    src/main/java
    ...
    pom.xml

WebAppTest
    src/main/test
        test.package.name
            webAppAcceptanceTestIT.java
    Maven Dependencies
        junit-4.6.jar
        mockito-all-1.9.5.jar
        <<< No WebApp war/jars here >>>

WebAppTest 的 pom 中的依赖项如下所示:

<dependency>
    <groupId>...</groupId>
    <artifactId>webapp</artifactid>
    <version>...</version>
    <type>war</type>
    <scope>compile</scope>
</dependency>

已经尝试过type=jarscope=test但这些都没有达到目标。不确定我是否遗漏了什么或以错误的方式解决这个问题?我应该改用 Maven 模块吗?不想让事情过于复杂。当然,我可以作弊并将 WebApp 添加到 WebAppTest 的构建路径中,但我想做到这一点,以便它在部署时工作。

另一个问题 - WebAppTest 应该打包为 WAR 还是 JAR?它只包含执行 WebApp 代码和检查结果的测试。我是否认为它仍然需要作为 WAR 文件部署到 Glassfish 中?

4

1 回答 1

2

您有几个选项,按优先顺序递减:

使用 HTTP(仅)进行验收测试

部署战争,触发 HTTP 请求,单独检查数据库。无需访问 webapp 的类。这是最干净的选项和最可维护的。

容器内测试

使用 Arquillian 将应用程序与您的测试一起部署并运行它们。您需要在原始战争的 POM 中添加attachClassesmaven-war-plugin's 配置。您的测试项目需要依赖[artifactid]-classes而不是artifactid. 您的测试在 Glassfish 中运行(Arquillian 负责启动 Glassfish 和部署战争)。

Arquillian 有一点学习曲线。

远程公开 WebApp 类

使用类似 Spring 的 HTTPInvoker 将要测试的类公开给测试代码。您的测试在 Glassfish 的单独 JVM 中运行,并使用 HTTP 连接到被测类。您仍然需要像在容器内一样更改 POM。如果您的 WAR 不是基于 Spring 的,这可能会很棘手,并且对原始应用程序具有很大的侵入性。您也可能会遇到序列化问题。

于 2013-01-16T15:58:02.597 回答