@SpringBootTes

发布时间 2023-08-03 12:06:06作者: kelelipeng


SpringBoot Test 人类使用指南
https://zhuanlan.zhihu.com/p/111418479


单元测试 注入方法 @ExtendWith
https://www.cnblogs.com/pass-ion/p/15064785.html


带有 Spring Boot 的 Junit 5:何时使用 @ExtendWith Spring 或 Mockito?
https://www.51c51.com/danpianji/xinxi/84/898364.html

 

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = MyConfiguration.class)
class MyUnitTest
{
@Autowired
private MyService myService;
@Test
void test()
{ // ...}
}


这样做可以只加载MyConfiguration类,而不启动完整的应用程序上下文。

 

 

_________________________________________________________________________________________________________________________

 

 

 

在Spring Boot中,注解是一个非常重要的概念,它可以用来标记各种组件、配置和测试等。其中,@Test注解是JUnit测试框架中最重要的注解之一,它可以帮助开发者编写高效、可靠的单元测试。

本文将详细介绍@SpringBootTest注解的使用方法和注意事项。

 

 

 

@SpringBootTest注解的作用

首先,让我们来了解一下@SpringBootTest注解的作用。

@SpringBootTest注解可以用来标记一个测试类,它告诉Spring Boot启动一个完整的应用程序上下文,而不仅仅是一个单一的测试类或测试方法。

这个完整的应用程序上下文将包含所有的Spring Bean、配置和依赖项,这样我们就可以像在实际的应用程序中一样运行我们的测试用例。

 

 

@SpringBootTest注解的使用方法

 接下来,我们将详细介绍@SpringBootTest注解的使用方法。

首先,我们需要在测试类上标记@SpringBootTest注解:

  @SpringBootTest

 class MyApplicationTests { // ...}

 这样做会告诉Spring Boot启动一个完整的应用程序上下文,并加载所有的Spring Bean和配置。

我们还可以使用@SpringBootTest注解的webEnvironment属性来指定应用程序上下文的Web环境类型。

例如,如果我们要测试一个Web应用程序,可以使用如下代码:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class MyApplicationTests { // ...}

 

 

这样做会告诉Spring Boot在随机端口上启动Web服务器,以便我们可以测试Web应用程序的功能。 

另外,我们还可以使用@SpringBootTest注解的classes属性来指定要加载的配置类。

例如,如果我们要测试一个仅包含特定配置类的Spring应用程序,可以使用如下代码:  

@SpringBootTest(classes = MyConfiguration.class)
class MyApplicationTests { // ...}
 

这样做会告诉Spring Boot只加载MyConfiguration类,而不是整个应用程序上下文。

 

 

@SpringBootTest注解的注意事项

 最后,让我们来了解一些使用@SpringBootTest注解时需要注意的事项。

首先,由于@SpringBootTest注解会启动一个完整的应用程序上下文,因此它可能会很慢。

因此,我们建议将@SpringBootTest注解仅用于集成测试,而不是单元测试。

对于单元测试,我们可以使用@SpringBootTest注解的注释层次结构(Annotation Hierarchy)来模拟应用程序上下文的一部分。

例如,我们可以这样编写测试代码: 

 

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = MyConfiguration.class)
class MyUnitTest
{
@Autowired
private MyService myService;
@Test
void test()
{ // ...}
}

 这样做可以只加载MyConfiguration类,而不启动完整的应用程序上下文。

 

另外,由于@SpringBootTest注解启动的应用程序上下文可能包含大量的Spring Bean和依赖项,因此它可能会与其他测试用例产生意外的干扰。

因此,我们建议在测试类中使用@DirtiesContext注解,以便在每个测试方法之间重新加载应用程序上下文。

例如,我们可以这样编写测试代码:

 

@SpringBootTest
@DirtiesContext
class MyIntegrationTest { // ...}
 

这样做可以确保每个测试方法都在一个干净的应用程序上下文中运行,避免了测试之间的干扰。

  

此外,还有一些其他需要注意的事项。

例如,由于@SpringBootTest注解会启动一个完整的应用程序上下文,因此它可能会消耗大量的系统资源,特别是内存。

因此,我们建议在测试过程中监视系统资源使用情况,并在必要时调整测试环境。

另外,由于@SpringBootTest注解启动的应用程序上下文可能包含敏感信息(例如数据库密码),因此我们建议在测试环境中使用虚拟或隔离的数据库。