如何在使用spring boot:run
命令构建和部署时为spring boot应用程序运行单元测试。
我的期望是在运行应用程序之前执行所有单元测试,但我不想在之前创建另一个maven命令,如mvn test
。
我的问题: 我做了一个简单的spring启动应用程序,我可以在从intellij或命令行运行应用程序时找到运行单元测试的方法。首先,我认为我可能有错误的配置或错误的测试classess名称或错误的项目结构。所以我从intellij模板创建了spring boot应用程序。令我高兴的是它已经编写了默认测试,所以我只是运行应用程序。不幸的测试没有被执行。
这是intellij创建的项目结构,pom.xml,主类和单元测试的屏幕截图。Project created by intetelij
我更改了测试运行器并测试失败并再次尝试。结果相同。 unit test changed to fail
我用Google搜索了spring boot:run
命令下隐藏的内容
http://docs.spring.io/spring-boot/docs/current/maven-plugin/run-mojo.html
我在手册的顶部发现了一些有趣的东西:“在执行之前调用生命周期阶段test-compile的执行。”所以我的理解是这个命令只编译测试但不运行它们?如果是,问题是 - 是否可以通过在命令中添加一些标志来添加“测试”阶段?
最诚挚的问候,
米甲
答案 0 :(得分:4)
这里的问题与maven生命周期有关。根据{{1}}的{{3}},它默认绑定到生命周期阶段spring-boot:run
,并在执行之前调用阶段validate
。
您要求的是在运行应用程序之前执行测试。您可以在POM中使用自定义maven配置文件执行此操作 - 如下所示。
test-compile
在POM中使用此功能,您可以运行测试并使用以下命令启动应用程序:
<project>
<profiles>
<profile>
<id>test-then-run</id>
<build>
<defaultGoal>verify</defaultGoal>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>spring-boot-run</id>
<phase>verify</phase>
<goals>
<goal>run</goal>
</goals>
<inherited>false</inherited>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
...
</profiles>
...
</project>
这会将mvn -P test-then-run
目标绑定到run
阶段而不是verify
阶段,这意味着将首先运行测试。您可以在此处查看阶段的运行顺序:docs
答案 1 :(得分:0)
我知道在运行应用程序之前我可以使用mvn test。事实上,它可以通过intellij中的许多方式实现。对我来说,我只是在启动应用程序之前添加mvn目标测试:
intellij中的
spring boot配置。 但当然可能会有不同的做法。
问题是,我只是非常好奇我是否可以以某种方式操纵spring boot:使用一些标志运行命令或者其他来获得相同的结果但是不可能。
olambert ,谢谢你的答案,它的效果非常好。