spring boot使用TestRestTemplate集成测

作者: 就怕是个demo | 来源:发表于2017-11-07 22:17 被阅读2492次

    这篇文章没什么技术含量,只是单纯的记录一下如何用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();
        }

    相关文章

      网友评论

        本文标题:spring boot使用TestRestTemplate集成测

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