我已经获得了需要测试的现有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=jar
和scope=test
,但这些都没有达到标记。不确定我是否遗漏了某些东西或者错误的方式?我应该使用Maven模块吗?不要让事情过于复杂。当然,我可以欺骗并将WebApp添加到WebAppTest的构建路径中,但我希望能够正确使用它,以便在部署时能够正常工作。
另一个问题 - WebAppTest应该打包为WAR还是JAR?它只包含执行WebApp代码和检查结果的测试。我认为它仍然需要作为WAR文件部署到Glassfish中吗?
答案 0 :(得分:2)
您有多种选择,按优先顺序递减:
部署war,向其发出HTTP请求,单独检查数据库。无法访问webapp的类。这是最干净的选择,而且最易于维护。
使用Arquillian将应用程序与测试一起部署并运行它们。
您需要在原始战争的POM中将attachClasses
添加到maven-war-plugin
的配置中。您的测试项目需要依赖[artifactid]-classes
而不是artifactid
。您的测试在Glassfish中运行(Arquillian处理启动Glassfish并部署战争)。
Arquillian有一点学习曲线。
使用类似Spring的HTTPInvoker的方法将要测试的类公开给测试代码。您的测试在单独的JVM中运行到Glassfish,并使用HTTP连接到测试中的类。您仍然需要像容器内的情况一样更改POM。如果您的WAR不是基于Spring的,并且对原始应用程序非常具有侵入性,那么这可能会很棘手。您也可能遇到序列化问题。