Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 哪个maven阶段总是在测试阶段之后执行?_Mysql_Maven_Maven Plugin - Fatal编程技术网

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

Mysql 哪个maven阶段总是在测试阶段之后执行?,mysql,maven,maven-plugin,Mysql,Maven,Maven Plugin,我已经实现了一个Maven插件,用于在Maventest阶段之前创建测试数据库(使用随机名称),并在test阶段完成时删除该数据库 插件需要执行两次,在test阶段之前(用于创建数据库时)和test阶段之后(用于删除该测试数据库时) 测试阶段之后始终执行哪个Maven生命周期阶段,无论测试阶段是否成功执行?测试中没有对应于测试前和测试后的特定阶段。这是因为单元测试不需要外部环境。听起来您想要做的不是单元测试,而是集成测试,因为它们需要设置一个环境 从: test-使用合适的单元测试框架测试编译

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

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


测试阶段之后始终执行哪个Maven生命周期阶段,无论
测试
阶段是否成功执行?

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

从:

  • test
    -使用合适的单元测试框架测试编译的源代码。这些测试不应要求打包或部署代码
  • 集成测试
    -必要时将包处理并部署到可以运行集成测试的环境中
还有一个
集成前测试
集成测试
集成后测试
,用于设置、运行和销毁测试环境

  • 预集成测试
    :在执行集成测试之前执行所需的操作。这可能涉及设置所需环境等事项
  • 集成测试
    :如有必要,处理包并将其部署到可以运行集成测试的环境中
  • 集成后测试
    :执行集成测试后执行所需的操作。这可能包括清理环境
因此,在
集成测试
阶段使用


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


而且,如果您真的想在
test
阶段将其作为单元测试运行,并使用插件,则必须跳过
maven-surefire插件的默认执行,然后定义maven插件创建数据库的执行,新执行
maven-surefire插件
,执行maven插件删除数据库,绑定到
测试
阶段

这是因为Maven在插件绑定到同一阶段时按顺序调用插件

配置如下所示:

<plugin>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.19.1</version>
  <executions>
    <execution>
      <id>default-test</id>
      <configuration>
        <skip>true</skip>
      </configuration>
    </execution>
  </executions>
</plugin>
<plugin>
  <groupId><!-- group id of your plugin --></groupId>
  <artifactId><!-- artifact id of your plugin --></artifactId>
  <version><!-- version --></version>
  <executions>
    <execution>
      <id>create-db</id>
      <phase>test</phase>
      <goals>
        <goal><!-- your goal --></goal>
      </goals>
      <!-- add configuration -->
    </execution>
  </executions>
</plugin>
<plugin>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.19.1</version>
  <executions>
    <execution>
      <id>test</id>
      <phase>test</phase>
      <goals>
        <goal>test</goal>
      </goals>
    </execution>
  </executions>
</plugin>
<plugin>
  <groupId><!-- group id of your plugin --></groupId>
  <artifactId><!-- artifact id of your plugin --></artifactId>
  <version><!-- version --></version>
  <executions>
    <execution>
      <id>drop-db</id>
      <phase>test</phase>
      <goals>
        <goal><!-- your goal --></goal>
      </goals>
      <!-- add configuration -->
    </execution>
  </executions>
</plugin>

maven surefire插件
2.19.1
默认测试
真的
创建数据库
测试
maven surefire插件
2.19.1
测试
测试
测试
下降分贝
测试

尽管将默认测试绑定到空阶段在Maven中有效,但IntelliJ将其标记为错误,在我的例子中,IntelliJ随后无法解析Maven导入的任何依赖项。用这种方式禁用默认测试阶段:defaulttesttrue@robyes!事实上,这样更干净,谢谢你的评论!