Spring Boot下编写Controller层单元测试(一)

Maven依赖信息

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- test end -->

</dependencies>

定义一个REST接口

定义一个实体类Demo

public class Demo {
    private String name;
		// setter, getter...
}

新建一个Controller类,定义一个查询方法。
URL为GET demos,调用成功后将返回一个json数组,http返回码为200 OK。

@Controller
@RequestMapping("demos")
public class DemoController {

    @GetMapping
    public ResponseEntity<List> searchDemo() {
        return new ResponseEntity<>(new ArrayList<Demo>(), HttpStatus.OK);
    }
}

编写测试用例

对于单元测试来说只需要关注Controller层,而不需要加载整个Spring上下文。

// 告诉junit使用MockitoJUnitRunner来运行测试用例
// 这样就可以使用@Mock和@InjectMocks注解
@RunWith(MockitoJUnitRunner.class)
public class MockDemoControllerTest {

    private MockMvc mockMvc;

    @InjectMocks
    private DemoController demoController; // 创建demoController

    @Before
    public void setUp() throws Exception {
				// 构造mockMvc,指定需要测试的Controller对象
        mockMvc = MockMvcBuilders.standaloneSetup(demoController).build();
    }

    @Test
    public void should_get_demos() throws Exception {
				// 调用此接口并断言返回 200 OK
        mockMvc.perform(get("/demos")).andDo(print())
                .andExpect(status().isOk());
    }

}

运行成功后将会打印以下信息
测试通过

总结

在本篇小文中介绍了如何针对Spring Boot编写的REST接口进行测试,用到了spring-tes提供的MockMvc实现对HTTP请求的模拟。除此之外,测试中还利用MockMvc提供的验证工具对结果进行断言。

本文只能算是一个开头,示例项目中并没有调用任何业务逻辑,我将在下一篇中讲述如何mock依赖关系。

SpringBoot基础之MockMvc单元测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值