【问题标题】:What is the difference between 'mvn verify' vs 'mvn test'?“mvn verify”与“mvn test”有什么区别?
【发布时间】:2021-06-26 18:45:35
【问题描述】:

我对@9​​87654324@ 阶段有点困惑。我创建了一个Spring Boot 项目(一个简单 项目,没有添加任何显式配置)。我创建了一些JUnit 单元测试,它们同时使用mvn verifymvn test 命令运行。

mvn verifymvn test 命令输出中没有观察到任何差异。

mvn verifymvn test 有何不同?

Stack Overflow 上的一些帖子也提到 mvn verify 运行集成测试。如果是这种情况,那么我有几个问题。

  • Maven 如何将特定测试识别为单元测试或集成测试?
  • 如果mvn verify 应该只运行集成测试,那么为什么要使用它执行单元测试?

【问题讨论】:

  • @JFabianMeier 我同意,但是在区分 verify 除了执行除 test 之外的其他阶段之外,文档让我非常困惑。还有checks on results of integration tests to ensure quality criteria不是很清楚,检查什么?为什么只有集成测试?质量标准在哪里配置?
  • 在这里您可以看到 JAR 的不同阶段会发生什么:maven.apache.org/guides/introduction/… 当然,可以将其他目标绑定到阶段。

标签: maven maven-lifecycle


【解决方案1】:

首先,当您运行一个 Maven 目标时,它将运行任何以前的目标。基本阶段的顺序是:

  • 验证
  • 编译
  • 测试
  • 验证
  • 安装
  • 部署

如果您运行Test,Maven 将执行验证、编译和测试。基于此,第一点是verify包含test。

基于official documentation:

  • TEST - 使用合适的单元测试框架测试编译的源代码。这些测试不应该要求打包或部署代码

  • 验证 - 对集成测试的结果进行任何检查,以确保满足质量标准

要运行单元测试,建议使用Surefire pluginFailsafe 用于集成测试。

verify 命令在执行验证之前按顺序执行每个默认生命周期阶段(验证、编译、打包等)。大多数情况下效果和package一样。但是,如果有集成测试,这些测试也会被执行。在 verify 阶段可以进行一些额外的检查,例如如果您的代码是根据预定义的 checkstyle 规则编写的。

结论:如果您想运行集成测试并进行检查,请使用 verify。如果您只想运行单元测试,请使用 test

我的个人建议:如果有疑问,请使用验证

【讨论】:

  • 确保质量标准 - 该标准在哪里配置?
  • 这取决于您的配置和您使用的插件。通常,您使用故障安全插件配置集成测试规则。仅集成测试将使用 verify 执行(仅使用 mvn test 单元),然后,您可以配置例如在一个测试失败时中断执行,或者即使有测试失败,您也可以配置为完成所有构建而不中断。有很多 Maven 插件,您可以将具体操作附加到任何阶段。 “规则”标记在您的所有 pom 配置上。从执行命令甚至启动 docker 容器....
  • 这种配置在您的 CI 环境中非常重要。继续同一个示例,如果您的构建在 IT 测试失败时中断,您的合并请求将标记该执行失败。否则,人们会看到它“呈绿色”。
猜你喜欢
  • 2018-10-08
  • 2018-10-20
  • 2011-07-09
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 2018-09-26
相关资源
最近更新 更多