当前位置:   article > 正文

springboot三板斧之单元测试_spring boot 单元测试

spring boot 单元测试

在Spring Boot中,单元测试是一个重要的环节,它帮助开发人员确保他们的代码按预期工作并且在未来的维护中保持稳定。Spring Boot提供了多种工具和注解来支持单元测试,其中JUnit和Mockito是最常用的。

基本的单元测试

使用JUnit框架可以创建和运行单元测试。在Spring Boot应用程序中,可以使用@SpringBootTest注解来提供测试的配置。

1. 依赖配置

首先,确保在pom.xml(对于Maven项目)或build.gradle(对于Gradle项目)中包含了JUnit和Spring Boot Test的依赖。

<!-- Maven Dependency for Spring Boot Test Starter -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2. 编写测试类

创建一个测试类,并使用@SpringBootTest注解来加载应用程序上下文。

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class ApplicationTests {

    @Test
    void contextLoads() {
        // 测试应用程序上下文加载是否正确
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3. 测试单个组件

使用@MockBean创建模拟对象,@Autowired来注入依赖,利用@Test注解来标识测试方法。

import static org.mockito.Mockito.*;

import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class SomeServiceTest {

    @Autowired
    private SomeService someService;

    @MockBean
    private SomeDependency someDependency;

    @Test
    public void testSomeMethod() {
        // 设置模拟对象行为
        when(someDependency.someMethod()).thenReturn(expectedValue);

        // 调用服务方法
        someService.performAction();

        // 验证模拟对象的交互
        verify(someDependency).someMethod();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

测试REST控制器

Spring Boot提供了MockMvc来模拟HTTP请求,这对于测试REST控制器很有用。

1. 使用@WebMvcTest

import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.web.servlet.MockMvc;

@WebMvcTest(controllers = SomeController.class)
public class SomeControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testSomeEndpoint() throws Exception {
        // 模拟HTTP请求并验证响应
        mockMvc.perform(get("/some/endpoint"))
               .andExpect(status().isOk())
               .andExpect(content().string(containsString("expected content")));
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

2. 使用@RestClientTest

如果你需要测试REST客户端,可以使用@RestClientTest。

集成测试与单元测试的区别

单元测试:测试一个类的单个方法或者小块逻辑。
集成测试:测试多个组件一起工作的情况,或者测试整个应用程序的工作流程。
在Spring Boot中,集成测试通常会加载整个应用程序上下文或者部分上下文,这样会比单元测试更慢,但可以覆盖更多的交互场景。

测试数据库交互

可以使用@DataJpaTest来测试JPA存储库:

import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;

@DataJpaTest
public class SomeRepositoryTest {

    @Autowired
    private SomeRepository someRepository;

    @Test
    public void testRepositoryMethod() {
        // 使用存储库进行操作
        // 验证结果
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

注意事项

  • 保持测试简单、快速和确定性强。
  • 尽可能使用模拟替代实际的数据库或外部服务调用。
  • 为了保证测试的独立性和可重复性,应该避免在Spring Boot中,单元测试通常聚焦在小的、可独立测试的代码片段上,比如单个的方法或者类。这里是一些关键点来帮助你开始在Spring Boot项目中进行单元测试。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/653794
推荐阅读
相关标签
  

闽ICP备14008679号