前言
首先我最次要的问题就是心急,对于我的项目任务分配不明确,不可能很好的将当前任务分工,导致每次提交 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<User> 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());
}
总结:
要应用麻利开发(将大的工作一直调配成各个小工作,保障每个小工作最晚当天能够实现)+ 单元测试的办法。