美文网首页软件测试
Spring Boot下编写Controller层单元测试(一)

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

作者: 鱼头三 | 来源:发表于2019-12-11 23:40 被阅读0次

    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单元测试

    相关文章

      网友评论

        本文标题:Spring Boot下编写Controller层单元测试(一)

        本文链接:https://www.haomeiwen.com/subject/qzqzgctx.html