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();
        }
    

      

  • 相关阅读:
    c++单例模式为什么不在析构函数中释放静态的单例对象(转)
    Ubuntu 树莓派2b交叉编译环境
    多线程std::cout 深入研究
    c++11的 move并没有实际move
    RTC时间设置
    QT 第三方串口库COM10以上无法读取问题
    ubuntu gcc-5 安装
    STM32正交编码器驱动电机
    (转)layoutSubviews总结
    自定义视图控制器切换(iOS)
  • 原文地址:https://www.cnblogs.com/pangguoming/p/10599762.html
Copyright © 2011-2022 走看看