0

让我解释一下我的一些限制。

我们有一个拥有 CXF Soap 服务和 Spring MVC REST 服务的战争。CXF 和 Spring MVC 实现都在一个单独的 jar 中,并作为依赖项引入。REST 服务在其项目中有其单元测试。

我想知道是否有任何方法可以在 REST jar 中执行诸如“mvn clean test”之类的操作时设置本地版本的战争,然后运行单元测试。因此,在构建像 Hudson 之类的东西或进行发布时,不必有任何变通方法(例如部署快照耳或手动运行本地战争)?当测试在战争中使用货物时,我已经看到了这一点,但在测试与战争分开时却没有。

现在,我们将把测试放到一个单独的 jar 中,但这仍然不理想,好像在发布期间发生了问题,这意味着 REST jar 和战争已经发布。我更喜欢采用上述方式,将测试与 REST 服务放在同一个项目中。

如果有人有任何可以帮助解决此问题的指针或文档或示例,将不胜感激。

4

2 回答 2

1

Maven 也有集成测试阶段。使用 maven-jetty-plugin 启动容器并部署应用程序。然后运行您的集成测试。

更新

测试不能在 jar 文件中。Maven surefire 插件无法运行它们。测试是您运行集成测试的项目的一部分。测试的war文件可以设置为依赖库。它将被下载、部署并运行集成测试。

于 2010-09-09T21:45:44.677 回答
1

老实说,我不确定我是否理解所有的限制。无论如何,使用 Maven 实现集成测试的推荐方法是将它们放在一个单独的模块中(这更容易,特别是如果被测模块也有单元测试),这取决于被测战争/耳朵,并且:

  1. pre-integration-test在阶段启动一个容器并部署战争/耳朵
  2. 让 Maven 在期间运行测试integration-test
  3. 期间停止容器post-integration-test

对于步骤 #1 和 #3,我个人使用 Cargo。对于第 2 步,使用Maven Failsafe Plugin是首选选项(因为如果测试失败,它不会停止构建)。至少,这是我使用的,并且我已经使用下面的资源来构建我的设置。

另一种方法是从测试中启动/停止嵌入式容器。例如,这对于 Jetty 是可行的,请参阅Embedding JettyUnit Test Servlet with Jetty

资源

于 2010-09-11T10:20:50.323 回答