21

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

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

有什么mvn verify不同mvn test呢?

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

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

1 回答 1

29

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

  • 证实
  • 编译
  • 测试
  • 包裹
  • 核实
  • 安装
  • 部署

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

根据官方文档

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

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

要运行单元测试,推荐使用Surefire 插件。以及用于集成测试的Failsafe 。

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

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

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

于 2021-03-30T18:20:02.313 回答