在测试阶段之后总会执行哪个maven阶段?

时间:2016-02-22 10:08:29

标签: mysql maven maven-plugin

我已经实现了一个Maven插件,用于在Maven test阶段之前创建测试数据库(使用随机名称),并在test阶段完成后删除该数据库。

插件需要执行两次,在test阶段(用于创建数据库时)和test阶段之后(用于删除测试数据库时)。

在测试阶段之后,将始终执行哪个Maven生命周期阶段,是否成功执行<!-- Demo input for ETL --> <CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </CATALOG> 阶段?

1 个答案:

答案 0 :(得分:3)

Maven lifecycle中没有与测试前和测试后相对应的特定阶段。这是因为单元测试不应该需要外部环境。听起来你想要做的不是单元测试而是集成测试,因为它们需要设置环境。

来自docs

  
      
  • test - 使用合适的单元测试框架测试编译的源代码。这些测试不应要求打包或部署代码
  •   
  • integration-test - 如有必要,将程序包处理并部署到可以运行集成测试的环境中
  •   

还有pre-integration-testintegration-testpost-integration-test用于设置,运行和销毁测试环境。

  
      
  • pre-integration-test:执行集成测试之前执行所需的操作。这可能涉及诸如设置所需环境之类的事情。
  •   
  • integration-test:如有必要,将程序包处理并部署到可以运行集成测试的环境中。
  •   
  • post-integration-test:执行集成测试后执行所需的操作。这可能包括清理环境。
  •   

因此,使用maven-failsafe-pluginintegration-test阶段执行此操作会更容易,更清晰。

现在,如果您真的想将其作为单元测试运行,我不会将数据库的创建/删除写为Maven插件。在测试环境中配置测试数据库时,让应用程序创建测试数据库要好得多。 (例如,如果你正在使用Spring,它有很多设施。)

而且,如果你真的想在test阶段,中使用你的插件运行它作为单元测试,你将不得不跳过{{1}的默认执行然后定义创建数据库的Maven插件的执行,maven-surefire-plugin的新执行以及删除数据库的Maven插件的执行,绑定到maven-surefire-plugin阶段。

这是有效的,因为Maven在它们被绑定到同一阶段时按照as they are defined in the POM的顺序调用插件。

配置如下:

test