有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何为打包为WAR文件的Maven项目编写自动验收测试?

我得到了一个需要测试的现有Java应用程序(我们称之为“WebApp”)的源代码。它作为战争文件部署到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代码和检查结果的测试。我认为它仍然需要作为战争文件部署到Glassfish中,对吗


共 (1) 个答案

  1. # 1 楼答案

    您有几个选项,按偏好的降序排列:

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

    部署war,向其发出HTTP请求,单独检查数据库。不需要访问webapp的类。这是最干净、最易维护的选项

    容器内测试

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

    阿奎利安有点学习曲线

    远程公开WebApp类

    使用Spring的HTTPInvoker之类的工具向测试代码公开要测试的类。您的测试在Glassfish的单独JVM中运行,并使用HTTP连接到测试中的类。您仍然需要像在集装箱箱中一样更换POM。如果您的WAR不是基于Spring的,并且对原始应用程序具有入侵性,那么这可能会很棘手。您还可能遇到序列化问题