SpringRunner vs SpringBootTest


11

在单元测试中,@Runwith(SpringRunner.class)&之间有什么区别@SpringBootTest

您能给我解释一下每个用例吗?


1
您阅读过各种文档吗?还不清楚吗?
jonrsharpe

明显的区别是Spring测试与Spring启动测试,但这是一个非常广泛的问题
user7294900

我会明白,除了SpringRunner之外,什么时候应该使用@SpringBootTest。
zouari19年

Answers:


10

@RunWith(SpringRunner.class):您需要此批注以在junit测试期间仅启用spring boot功能(如@Autowire@MockBean

用于在Spring Boot测试功能和JUnit之间建立桥梁。每当我们在JUnit测试中使用任何Spring Boot测试功能时,都将需要此批注。

@SpringBootTest:此批注用于加载完整的应用程序上下文以进行端到端集成测试

当我们需要引导整个容器时,可以使用@SpringBootTest批注。批注通过创建将在我们的测试中使用的ApplicationContext起作用。

下面是关于这两种情况下明显的例子文章Baeldung


1

spring.io

@RunWith(SpringRunner.class)告诉JUnit使用Spring的测试支持运行。SpringRunner是的新名称SpringJUnit4ClassRunner,在眼睛上稍微容易一点。

@SpringBootTest说的是“在Spring Boot的支持下进行引导”(例如,加载application.properties并给我所有Spring Boot的好处)

因此,如果您不需要Spring Boot为集成测试加载的所有内容,则可能不需要 @SpringBootTest


0

@RunWith是JUnit 4中的一个旧注释,用于使用测试运行程序。如果您使用的是JUnit 5(木星),则应使用@ExtendWith来使用JUnit扩展

参见 https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-testing

“如果使用的是JUnit 4,请不要忘记也将@RunWith(SpringRunner.class)添加到测试中,否则注释将被忽略。如果使用的是JUnit 5,则无需添加等效的@ExtendWith( SpringExtension.class)(如@SpringBootTest)和其他@…Test注释已使用它进行注释。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.