近期学习总结

前言

首先我最主要的问题就是心急,对于项目任务分配不明确,不能够很好的将当前任务分工,导致每次提交pr代码量相对比较大,不仅增加自己的出错概率和测试难度,同时也给其他的协作成员带来很大的难度。

实例

以用户登录后台为例,在已经跳过很多坑的情况下,第二次再去弄用户登录的后台,本以为可以很好的解决,但是没有很好的将代码分块,导致代码量比较大,同时在进行单元测试的时候,遇到了很多问题。

单元测试

万物开头难,对于我来说,起初我是很反感单元测试的,我不得不承认它对于团队协作的巨大好处,但是由于锻炼比较少,每次测试时候总是不愿意用这种方式进行测试。在这里也感谢潘老师的督促,能够让自己静下心来去了解单元测试每个代码的意思。下面我将用一个具体的单元测试进行举例:

@Test
  void login() throws UnsupportedEncodingException {
    // 复制老项目的,用于添加注释

    // 构造请求url
    String url = "http://localhost:" + port + "/user/login";

    // 由于spring boot不提供自动配置的RestTemplate bean,他会提供一个restTemplateBuilder bean
    // 可用于在需要的时候创建RestTemplate实例。
    // restTemplate用于发起请求,其中exchange可以指定请求方法
    RestTemplate restTemplate = this.restTemplateBuilder.build();
    // 构造一个请求的headers
    HttpHeaders headers = this.getChromeHeaders();

    // 没有认证信息时401
    // 预言发起请求抛出的异常为HttpClientErrorException。
    Assertions.assertThrows(HttpClientErrorException.class, () -> restTemplate.getForObject(url, JSONObject.class));
    try {
      // HttpEntity包括请求头和请求主体
      HttpEntity entity = new HttpEntity(headers);
      // 调用exchange方法发起method为get,url为xxx,请求头和请求主体为entity,返回类型为User实体的
      restTemplate.exchange(url, HttpMethod.GET, entity, User.class);
    } catch (HttpClientErrorException e) {
      // 捕获异常为401,未认证
      Assertions.assertEquals(e.getStatusCode().value(), HttpStatus.UNAUTHORIZED.value());
    }

    // basic认证模式,构造前台传送信息,
    headers = this.getChromeHeaders();
    // 添加认证信息
    String auth = Base64.getEncoder().encodeToString(
            (appProperties.getUsername() + ":" + appProperties.getPassword()).getBytes("utf-8"));
    headers.add("Authorization", "Basic " + auth);

    // 构造一个请求信息,请求头为headers内容
    HttpEntity entity = new HttpEntity(headers);

    // 获取响应实体,通过get请求
    ResponseEntity result = restTemplate.exchange(url, HttpMethod.GET, entity, User.class);
    // 从响应头中获取参数x-auth-token,并断言非空(后台响应之后返回了token)
    String xAuthToken = result.getHeaders().get("x-auth-token").get(0);
    Assertions.assertNotNull(xAuthToken);
    // 获取响应主体,断言它的用户名等于xxx
    User body = result.getBody();
    Assertions.assertEquals(appProperties.getUsername(), body.getUsername());

    // x-auth-token认证
    // 第一次请求分配了一个token,第二次请求直接使用分配的token
    headers = this.getChromeHeaders();
    headers.add("x-auth-token", xAuthToken);
    // 获取完判断获得的user是之前的user。
    User user = restTemplate.exchange(url, HttpMethod.GET, entity, User.class).getBody();
    Assertions.assertEquals(UserInit.username, user.getUsername());
  }

总结:

要使用敏捷开发(将大的任务不断分配成各个小任务,保证每个小任务最晚当天可以完成)+ 单元测试的方法。

你可能感兴趣的:(springboot)