Spring Boot单元测试

本文详细介绍了如何在SpringBoot项目中进行GirlService的测试,包括添加查询方法并编写测试用例,同时涵盖了Controller API的测试。通过`@SpringBootTest`注解和MockMvc进行API交互的模拟。还提到了如何避免测试影响项目启动的技巧。
  • 测试Service
  • 测试API

测试Service

        在GirlService中添加一个方法,通过Id查询一个女生信息

/**
    通过Id查询一个女生信息
    @Param id
    @return
*/
public Girl findOne(Integer id){
    return girlRepository.findOne(id);
}

        在 src/test/java/com 下创建GirlServiceTest 测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class GirlService Test{
    @Autowired
    private GirlService girlService;
    
    @Test
    public void findOneTest(){
        //通过id获取女孩的信息
        Girl girl = girlService.findOne(73);
        //可以添加期望值
        Assert.assertEquals(new Integer(13).girlAge());
    }
}

测试API

        在 src/test/java/com/controller 创建GirlControllerTest 测试类

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigure
public class GirlControllerTest{
    @Autowired
    private MockMvc mvc;
    
    @Test
    public void girlList() throws Exception{
        mvc.perform(MockMvcRequestBuilders.get("/girls))
            .andExpect(MockMvcResultMathers.status().isOK());
    }
}

        若是需要测试返回值,可在.andExpect() 后添加 .andExpect(MockMvcResultMatchers.content().String("abc")) 。

在SpringBoot项目中,默认在mvn install 的时候会把test 目录下的测试单元走一遍。为避免因为单元测试出错而影响项目启动,我们可以使用这个命令。

mvn clean package -Dmaven.test.skip=true

### Spring Boot 单元测试教程及最佳实践 #### 了解Spring Boot 测试支持 Spring Boot 提供了丰富的测试支持,涵盖了多种常用的测试框架和工具,如 JUnit、Spring Test 和 Mockito 等。这些工具能够协助开发者高效地编写并执行不同种类的测试案例[^1]。 #### 配置构建文件以支持单元测试 为了使项目具备运行单元测试的能力,在 `build.gradle` 文件内需加入特定依赖项以及配置任务来指定采用 JUnit Platform 执行测试: ```groovy dependencies { ... testAnnotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } tasks.named('test') { useJUnitPlatform() } ``` 上述设置确保了 Lombok 的编译特性可以在测试环境中被利用到,并且指定了用于启动测试平台所需的库版本[^2]。 #### 编写简单的控制器层单元测试 创建一个新的 Java 类作为 API 控制器的功能性验证入口点。这里展示了一个基于 RESTful 设计模式的服务端点示例及其对应的单元测试方法实现方式: ```java // Controller Class Example @RestController @RequestMapping("/api/example") public class ExampleController { @GetMapping("/{id}") public ResponseEntity<String> getExample(@PathVariable String id){ return new ResponseEntity<>("Item with ID:" + id, HttpStatus.OK); } } // Unit Test For Above Controller Using MockMvc @SpringBootTest(webEnvironment = WebEnvironment.MOCK) @AutoConfigureMockMvc class ExampleControllerTest { @Autowired private MockMvc mockMvc; @Test void shouldReturnDefaultMessage() throws Exception { this.mockMvc.perform(get("/api/example/1")) .andExpect(status().isOk()) .andExpect(content().string(containsString("ID:1"))); } } ``` 这段代码展示了如何运用 `MockMvc` 对 HTTP 请求作出响应模拟操作,从而允许对 web 层逻辑进行隔离式的检验而不必真正发起网络请求[^3]。 #### 应用最佳实践建议 - **保持独立性**:每个测试应当尽可能减少对外部资源(数据库连接、远程服务调用等)的依赖程度; - **提高可读性和维护性**:遵循一致性的命名约定和技术栈标准,使得其他团队成员也容易理解所写的测试意图; - **注重性能效率**:避免不必要的初始化开销或冗余计算过程影响整体吞吐量表现;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

We Never say die

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

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

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

打赏作者

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

抵扣说明:

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

余额充值