Controller层TDD

实现一个 Web Application,对外提供一个获取用户信息的 API,请求 API 时返回用户信息(仅需返回固定的两条用户信息即可,内容如下)

请求样例:

request

curl http://localhost:8080/api/users

response

[{“id”:1,“username”:“Obama”},{“id”:2,“username”:“Clinton”}]

先写测试

@SpringBootTest
@AutoConfigureMockMvc
class SpringOverviewApplicationTests {

    @Autowired
    private MockMvc mockMvc;

    @Test
    void should_get_ok_when_get_users_api_is_successful() throws Exception {
        MockHttpServletResponse response = mockMvc
                .perform(MockMvcRequestBuilders.get("/api/users"))
                .andReturn()
                .getResponse();
        assertEquals(200,response.getStatus());
    }

    @Test
    void should_get_users_content_from_users_api() throws Exception {
        String content = mockMvc
                .perform(MockMvcRequestBuilders.get("api/users"))
                .andReturn()
                .getResponse()
                .getContentAsString();
        User[] users = new ObjectMapper().readValue(content, User[].class);

        assertEquals(2,users.length);
        assertEquals("Obama",users[0].getUsername());
        assertEquals("Clinton",users[1].getUsername());
    }
    @Test
    void should_test_users_api_using_fluent_testing_api() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/api/users"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.jsonPath("$.[0].username", Matchers.is("Obama")))
                .andExpect(MockMvcResultMatchers.jsonPath("$.[1].username",Matchers.is("Clinton")));
    }
}

再写接口

@RestController
@RequestMapping("/api/users")
public class UserController {
    private List<User> users = Arrays.asList(
            new User(1,"Obama"),
            new User(2,"Clinton")
    );

    @GetMapping
    public List<User> getUsers() {
        return users;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值