加速Spring Boot单元测试的执行速度

本文介绍了如何在SpringBoot2.7.15中使用SpringBootTest注解来优化单元测试,通过配置webEnvironment为NONE以避免启动web容器,减少bean注册数量,从而提高测试效率。
摘要由CSDN通过智能技术生成

Spring Boot版本:2.7.15

SpringBootTest注解可以配置以下属性来加速单元测试的执行:

  1. 如果单元测试不涉及到Controller接口调用,可以配置webEnvironment = SpringBootTest.WebEnvironment.NONE不启动web容器
  2. 可以通过classes = {...}手动指定需要注册到容器中的类,如果不设置该属性,默认会注册应用中所有类

示例代码:

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public String queryUsers() {
        return userMapper.queryUsersFromDB();
    }
}
@Repository
public class UserMapper {
    public String queryUsersFromDB() {
        return "user list";
    }
}
@SpringBootTest(
        webEnvironment = SpringBootTest.WebEnvironment.NONE,
        classes = {UserService.class, UserMapper.class}
)
public class UserServiceTest {
   @Autowired
   private UserService userService;

   @Test
   public void testUserService() {
      assertEquals("user list", userService.queryUsers());
   }
}

可以用以下代码输出容器中注册的所有bean:

@Test
public void testUserService() {
    assertEquals("user list", userService.queryUsers());

    // 查看容器中的bean
    System.out.println(ctx.getBeanDefinitionCount());
    for (String name : ctx.getBeanDefinitionNames()) {
        System.out.println(name);
    }
}

结果如下:
在这里插入图片描述
容器中只有10个bean

如果不设置@SpringBootTest的两个属性,结果如下:
在这里插入图片描述
容器中有133个bean,执行时间大大增加

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot提供了许多方便的工具来编写和运行单元测试。您可以使用JUnit或者Spring Boot自带的测试框架来编写单元测试。 首先,您需要在项目的pom.xml文件中添加测试相关的依赖。通常情况下,Spring Boot已经默认为您添加了JUnit和Spring Boot Test依赖,您只需要确保它们存在即可。 接下来,您可以创建一个测试类,并在类上添加`@RunWith(SpringRunner.class)`注解。这将告诉JUnit使用Spring Runner运行测试。您还可以使用`@SpringBootTest`注解来指定要加载的Spring Boot应用程序的配置。 然后,您可以在测试方法上使用`@Test`注解来标记要运行的测试方法。在测试方法中,您可以使用各种断言方法来验证预期的结果。 例如,假设您有一个名为`UserService`的服务类,其中包含一个名为`getUserById`的方法,用于根据用户ID获取用户信息。您可以编写以下单元测试: ```java @RunWith(SpringRunner.class) @SpringBootTest public class UserServiceTest { @Autowired private UserService userService; @Test public void testGetUserById() { User user = userService.getUserById(1L); assertNotNull(user); assertEquals("John Doe", user.getName()); assertEquals("john@example.com", user.getEmail()); } } ``` 在这个例子中,我们使用了`@Autowired`注解将`UserService`注入到测试类中。然后,我们编写了一个名为`testGetUserById`的测试方法,使用断言方法来验证`getUserById`方法的返回结果是否符合预期。 运行测试时,Spring Boot会自动启动整个应用程序上下文,并注入所需的依赖项。您可以使用各种断言方法来验证预期的结果。 这只是Spring Boot单元测试的一个简单示例,您可以根据实际需求编写更复杂的测试。希望对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

byx2000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值