Spring启动不运行单元测试

时间:2016-10-11 17:29:55

标签: java spring unit-testing spring-boot

如何在使用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的执行。”所以我的理解是这个命令只编译测试但不运行它们?如果是,问题是 - 是否可以通过在命令中添加一些标志来添加“测试”阶段?

最诚挚的问候,

米甲

2 个答案:

答案 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目标测试:

image

intellij中的

spring boot配置。  但当然可能会有不同的做法。

问题是,我只是非常好奇我是否可以以某种方式操纵spring boot:使用一些标志运行命令或者其他来获得相同的结果但是不可能。

olambert ,谢谢你的答案,它的效果非常好。