zoukankan      html  css  js  c++  java
  • spring boot使用TestRestTemplate集成测试 RESTful 接口

    这篇文章没什么技术含量,只是单纯的记录一下如何用TestRestTemplate访问受security保护的api,供以后查阅。

    @Slf4j
    @RunWith(SpringRunner.class)
    @SpringBootTest(webEnvironment =     SpringBootTest.WebEnvironment.RANDOM_PORT)
    public class AccountControllerTests {
        @Autowired
        private TestRestTemplate restTemplate;
        private HttpEntity httpEntity;
    
        /**
         * 登录
         * @throws Exception
         */
        private void login() throws Exception {
            String expectStr = "{"code":0,"msg":"success"}";
            MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
            map.add("username", "183xxxxxxxx");
            map.add("password", "123456");
            ResponseEntity responseEntity = restTemplate.postForEntity("/api/account/sign_in", map, String.class);
            //添加cookie以保持状态
            HttpHeaders headers = new HttpHeaders();
            String headerValue = responseEntity.getHeaders().get("Set-Cookie").toString().replace("[", "");
            headerValue = headerValue.replace("]", "");
            headers.set("Cookie", headerValue);
            httpEntity = new HttpEntity(headers);
            assertThat(responseEntity.getBody()).isEqualTo(expectStr);
        }
    
        /**
         * 登出
         * @throws Exception
         */
        private void logout() throws Exception {
            String expectStr = "{"code":0,"msg":"success"}";
            String result = restTemplate.postForObject("/api/account/sign_out", null, String.class, httpEntity);
            httpEntity = null;
            assertThat(result).isEqualTo(expectStr);
        }
    
        /**
         * 获取信息
         * @throws Exception
         */
        private void getUserInfo() throws Exception {
            Detail detail = new Detail();
            detail.setNickname("疯狂的米老鼠");
            detail.setNicknamePinyin("fengkuangdemilaoshu");
            detail.setSex(1);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            detail.setCreatedAt(sdf.parse("2017-11-03 16:43:27"));
            detail.setUpdatedAt(sdf.parse("2017-11-03 16:43:27"));
            Role role = new Role();
            role.setName("ROLE_USER_NORMAL");
            Set<Role> roles = new HashSet<>();
            roles.add(role);
            User user = new User();
            user.setId(1L);
            user.setPhone("183xxxxxxxx");
            user.setEmail("xxxxxx@gmail.com");
            user.setDetail(detail);
            user.setRoles(roles);
            ResultBean<User> resultBean = new ResultBean<>();
            resultBean.setData(user);
            ObjectMapper om = new ObjectMapper();
            String expectStr = om.writeValueAsString(resultBean);
            ResponseEntity<String> responseEntity = restTemplate.exchange("/api/user/get_user_info", HttpMethod.GET, httpEntity, String.class);
            assertThat(responseEntity.getBody()).isEqualTo(expectStr);
        }
    
        @Test
        public void testAccount() throws Exception {
            login();
            getUserInfo();
            logout();
        }
    

      

  • 相关阅读:
    Luogu 4206 [NOI2005]聪聪与可可
    【Luogu】P3708Koishi的数字游戏(数论)
    【Luogu】P1850换教室(期望DP)
    【Luogu】P1231教辅的组成(拆点+Dinic+当前弧优化)
    【Luogu】P3865ST表模板(ST表)
    【Luogu】P3376网络最大流模板(Dinic)
    【Luogu】P1005矩阵取数游戏(高精度+DP)
    【Luogu】P2324骑士精神(IDA*)
    【Luogu】P3052摩天大楼里的奶牛(遗传算法乱搞)
    洛森地图半成品
  • 原文地址:https://www.cnblogs.com/pangguoming/p/10599762.html
Copyright © 2011-2022 走看看