【问题标题】:How to run single integration test in maven?如何在 Maven 中运行单个集成测试?
【发布时间】:2018-09-04 05:51:30
【问题描述】:

我正在尝试运行单个集成测试。我有很多 *IT 课程,我只想运行一个测试。我试试这个:

mvn -Dit.test=XControllerIT verify

我做错了吗?还有另一种选择吗?正在使用 Maven。

【问题讨论】:

  • 你在使用 maven-failsafe-plugin 吗?此外,这个测试是否存在?什么显示输出?

标签: java maven mockito integration-testing


【解决方案1】:

根据您的项目设置,有两个主要选项:

  • 集成测试使用专用的故障安全插件运行
  • 集成测试使用常规的万能插件运行

如果你有一个故障保护插件(你确实应该这样做,这是推荐的方法),那么使用下面的 sn-p:

mvn -Dit.test=MySampleIntegrationTest failsafe:integration-test

如果你确定了,那么运行:

mvn -Dtest=MySampleUnitTest surefire:test

在这两种情况下,都有一个直接的插件目标执行,绕过了你最初示例中的生命周期(使用mvn verify

在 maven 中可以运行生命周期,请参阅Default Lifecycle Documentation 了解更多信息

基本上,生命周期由多个阶段组成,每个阶段都绑定了插件 因此,当您运行 mvn verify 时,verify 之前的所有阶段也会运行。

因此,代码将被编译(编译阶段会自动附加一个 maven 编译插件来完成这项工作),测试将运行(surefire 插件),等等。

如果您没有已编译的源代码和测试代码,则不能使用所提供的方法,因为您必须先编译代码。

但是,如果您已经编译了所有内容,则只运行一个测试而不重新编译代码是有意义的,在这种情况下,您可以使用建议的解决方案,具体取决于插件。

特别是对于本地调试或 CI 在某些情况下多步骤构建设置(可以在相当复杂的项目中看到)很有意义

【讨论】:

  • 你不应该绕过生命周期,这背后有一个意图......首先运行单元测试,然后是集成测试......
  • @khmarbaise:很抱歉,但是如果有意这样做,绕过生命周期可能是一个完全可以接受的解决方案。 Maven 可以完美地处理它,当然,它并不总是必需的。我完全清楚生命周期背后的意图。我已经更新了答案,以澄清建议的解决方案何时适用(正如我从问题中理解的那样,情况正是如此)以及何时不适用。请阅读答案并决定是否仍要投反对票;)
  • @khmarbaise 我同意 Mark Bramnik 的观点。在某些情况下,绕过生命周期是可以接受的。示例:故障排除。让一切正常工作可能具有挑战性,在进行故障排除时,可以跳过您不感兴趣的内容。
猜你喜欢
  • 2010-10-28
  • 2018-07-12
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 2014-11-25
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多