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=jar
和scope=test
,但这两种方法都没有达到目的。不确定我是错过了什么还是走错了方向?我应该改用Maven模块吗?不要把事情复杂化。当然,我可以作弊,并将WebApp添加到WebAppTest的构建路径中,但我希望这一点是正确的,这样它在部署时就能工作
还有一个问题——WebAppTest应该打包成WAR还是JAR?它将只包含执行WebApp代码和检查结果的测试。我认为它仍然需要作为战争文件部署到Glassfish中,对吗
# 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的,并且对原始应用程序具有入侵性,那么这可能会很棘手。您还可能遇到序列化问题