我已经实现了一个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>
阶段?
答案 0 :(得分:3)
Maven lifecycle中没有与测试前和测试后相对应的特定阶段。这是因为单元测试不应该需要外部环境。听起来你想要做的不是单元测试而是集成测试,因为它们需要设置环境。
来自docs:
test
- 使用合适的单元测试框架测试编译的源代码。这些测试不应要求打包或部署代码integration-test
- 如有必要,将程序包处理并部署到可以运行集成测试的环境中
还有pre-integration-test
,integration-test
和post-integration-test
用于设置,运行和销毁测试环境。
pre-integration-test
:执行集成测试之前执行所需的操作。这可能涉及诸如设置所需环境之类的事情。integration-test
:如有必要,将程序包处理并部署到可以运行集成测试的环境中。post-integration-test
:执行集成测试后执行所需的操作。这可能包括清理环境。
因此,使用maven-failsafe-plugin
在integration-test
阶段执行此操作会更容易,更清晰。
现在,如果您真的想将其作为单元测试运行,我不会将数据库的创建/删除写为Maven插件。在测试环境中配置测试数据库时,让应用程序创建测试数据库要好得多。 (例如,如果你正在使用Spring,它有很多设施。)
而且,如果你真的想在test
阶段,和中使用你的插件运行它作为单元测试,你将不得不跳过{{1}的默认执行然后定义创建数据库的Maven插件的执行,maven-surefire-plugin
的新执行以及删除数据库的Maven插件的执行,绑定到maven-surefire-plugin
阶段。
这是有效的,因为Maven在它们被绑定到同一阶段时按照as they are defined in the POM的顺序调用插件。
配置如下:
test