【问题标题】:Pointers on how to to get a test jar to run a separate war for testing (perhaps with cargo?)关于如何让测试 jar 运行单独的测试战的指针(可能是货物?)
【发布时间】:2010-09-09 21:17:51
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 不,你不清楚 :) 你以某种方式混合了模块、打包,这使得这个问题很难理解。也许你应该用 ascii 树来描述项目结构,并解释你希望事情如何工作。

标签: java unit-testing maven-2 spring-mvc cargo


【解决方案1】:

老实说,我不确定我是否了解所有限制条件。无论如何,使用 Maven 实现集成测试的推荐方法是将它们放在一个单独的模块中(这要容易得多,尤其是在被测模块也有单元测试的情况下),这取决于下面的 war/ear测试并:

  1. pre-integration-test阶段启动容器并部署war/ear
  2. 让 Maven 在integration-test 期间运行测试
  3. post-integration-test 期间停止容器

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

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

资源

【讨论】:

  • 这周我会在有能力的时候再调查一下这个问题,然后回来将其中一个答案评为正确答案。感谢您的帮助。
【解决方案2】:

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

更新

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

【讨论】:

  • 只有当测试是用 jar 时才有效吗?还是我没有看到那里的东西?
  • 对不起,我指的是战争,不是罐子。就是这样,我必须将我的测试与战争分开(这意味着在一个罐子里)。因此,听起来这对我不起作用。
  • 您可以将集成测试作为战争项目的一部分。配置更简单。您必须设置 jetty 插件以在集成阶段开始,并设置用于集成测试的测试插件。
  • 我想我没有说清楚。 jar 与战争分开并包含测试。我要做的就是让 jar 制作一个本地版本的战争来运行它的测试。
  • 我明白了。唯一的可能是配置 Surefire 插件。看看这个 mojo 启用了什么:maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html 你必须解压 test-jar,然后设置 testSourceDirectory。
猜你喜欢
  • 2022-08-10
  • 2021-08-11
  • 2016-06-12
  • 2015-07-14
  • 2023-03-27
  • 1970-01-01
  • 2018-07-12
  • 2014-06-21
  • 2019-04-29
相关资源
最近更新 更多