我如何运行单元测试的Spring引导应用程序,而建设和部署使用Spring引导:运行
命令。
我的期望是在运行应用程序之前执行所有单元测试,但我不想在运行应用程序之前再执行另一个maven命令,如mvn test
。
我的问题是:我制作了一个简单的spring启动应用程序,在从intellij或命令行运行应用程序时,我可以找到一种运行单元测试的方法。首先,我认为可能我有错误的配置或者错误的测试类名称或者错误的项目结构。所以我从intellij模板创建了spring启动应用程序。令我高兴的是,它已经编写了默认测试,所以我只需运行应用程序。不幸的是,没有执行测试。
这是intellij创建的项目结构、pom.xml、主类和单元测试的截图。intetelij创建的项目
我将测试运行程序和测试更改为失败,然后重试。同样的结果。单元测试更改为失败
我用谷歌搜索了隐藏在springboot:run
命令下面的内容http://docs.spring.io/spring-boot/docs/current/maven-plugin/run-mojo.html
我在手册的顶部发现了一些有趣的东西:“在执行自身之前调用生命周期阶段测试编译的执行。”所以我的理解是这个命令只编译测试而不运行它们?如果是这样,问题是-是否可以通过向命令添加一些标志来添加“测试”阶段?
我知道我可以在运行应用程序之前使用mvn测试。事实上,在intellij中可以通过多种方式实现。对我来说,我只是在启动应用程序之前添加mvn目标测试:
intellij中的Spring启动配置。但当然可能会有不同的做法。
问题是,我只是非常好奇,我是否可以通过使用一些标志或其他东西来操纵Spring引导:运行命令,以获得相同的结果,但这是不可能的。
奥兰伯特,也谢谢你的回答,效果很好。
你在这里的问题是与maven生命周期有关。根据sping-start: run
的文档,默认情况下,它绑定到生命周期阶段valester
,并在执行之前调用阶段test-compile
。
您所要求的是在运行应用程序之前执行测试。您可以通过POM中的自定义maven配置文件来实现这一点——类似于以下内容。
<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>
在你的POM中有了这个,你可以运行测试并启动应用程序:
mvn -P test-then-run
这将运行
目标绑定到验证
阶段,而不是验证
阶段,这意味着测试将首先运行。您可以在此处查看阶段的运行顺序:https://maven.apache.org/ref/3.3.9/maven-core/lifecycles.html
几周前,我正在进行单元测试,它们按照预期进行构建和运行。 我休假了一周,今天早上启动了我的机器,没有对单元测试项目进行任何代码更改,测试就不再运行了。 当我说“测试不再运行”时,我并不是说它们失败了;他们实际上不会逃跑。 我试过运行或调试一个特定的测试,我试过运行或调试所有的测试,我试过从每个测试方法名称旁边的Resharper图标,我试过从test菜单项,我试过从“Unit test Sessi
我有以下测试: 这是好的,它可以运行,但是我想知道有没有一种方法可以将它作为单元测试而不是集成测试运行,并且仍然使用@mockbean@autowired。还是我错过了什么? 我试着只保留@ExtendWith(SpringExtension.class),但我得到一个关于找不到BookServiceImpl bean的异常。 我知道如何使用MockitoExtension和@mock、@inje
我想测试我的SpringBoot应用程序,它使用cassandra作为CrudRepository。我最终得到了 具有 和 这就导致了 如果我使用旧版本的cassandra-unit-Spring 它以NullPointerException结束,因为没有注入值repo。 来源https://github.com/StephanPraetsch/spring.boot.cassandra.unit
需要对项目的控制器部分进行单元测试,但却得到了错误。我相信ModelAndVIew部分导致了这个问题,尽管我曾经嘲弄过它并返回ModelAndVIew,因为它是方法的返回类型。然而,它并不起作用。pom.xml没有任何问题,因此没有添加它。ProjectController: java.lang.IllegalStateException:找不到@SpringBootConfiguration,您
然而,该项目有许多类似的“测试”: 这个特殊的类创建了一个示例数据库映像,供开发人员使用。诚然,我们可以创建直接的SQL脚本,但Java进程非常有用,因为其中的代码也可以从外部源(例如Liferay)查询数据 我们为此使用单元测试的原因是因为开发人员可以轻松地在IntelliJ中运行它来加载新的数据库映像。然而,这并不是真正的“测试”,而是使用测试运行器作为运行Java进程的快速方法。 我正在建立
一、JUnit 是什么? JUnit 是一个 Java 语言的回归测试框架(regression testing framework),由 Kent Beck 和 Erich Gamma 建立。 Junit 测试也是程序员测试,即所谓的白盒测试,它需要程序员知道被测试的代码如何完成功能,以及完成什么样的功能。 二、IDEA 的 开始JUnit测试 测试项:查询全部用户数据 junit测试方法: