본문 바로가기
개발/Junit

⑩Junit Controller Test bookList, Search, delete, update Test

by 외노자개발 2022. 10. 23.
반응형

 

 

2. BookList Test

	@Sql("classpath:db/tableInit.sql")
	@Test
	public void getBookList_test() {
		//given
		
		//when
		HttpEntity<String> request = new HttpEntity<>(null, headers);

		ResponseEntity<String> response = rt.exchange("/api/v1/book", HttpMethod.GET, request,  String.class);

		//then
		DocumentContext dc = JsonPath.parse(response.getBody());
		Integer code = dc.read("$.code");
		String title = dc.read("$.body.items[0].title");
		
		assertThat(code).isEqualTo(1);
		assertThat(title).isEqualTo("junit");
	}

List를 표시 하는 기능이기에 given은 없다. 바로 when 들어가보자.

when // HttpEntity를 reqest로 저장, given이 없기 때문에 body는 따로 없고 headers만 받는다. 

response로 book등록과 같지만, HttpMethod를 GET으로 설정한다. 

then// DocumentContext는 저번 게시물에 설명을 했지만, 다시 해보자면String을 object로 변환하지 않고도 연산자 함수 표현식등의 기능을 수행가능하다.

code로 200을 받으면 1이 반환 되기에 assertThat에서 1을 비교한다. 

title으로는 beforeEach에서 설정한 items의 title을 가져오면서 "Junit"과 비교를 해준다. 

 


3. bookSearch Test

	@Sql("classpath:db/tableInit.sql")
	@Test
	public void getBookSearch_test() {
		//given
		Integer id = 1;
		
		//when
		HttpEntity<String> request = new HttpEntity<>(null, headers);
		ResponseEntity<String> response = rt.exchange("/api/v1/book/" + id, HttpMethod.GET, request,  String.class);
		
		System.out.println(response.getBody());
		
		//then
		DocumentContext dc = JsonPath.parse(response.getBody());
		Integer code = dc.read("$.code");
		String title = dc.read("$.body.title");
		
		assertThat(code).isEqualTo(1);
		assertThat(title).isEqualTo("junit");
	}

바로 해석해보자,, 

given // Integer id로 1을 받는다. 

when // 여기도 지금까지와 같이 HttpEntity와 ResponseEntity를 설정한다. 

System.out.println(response.getBody()); 는 확인 용도로 만들어 놨다. body의 값으로는 

{"code":1,"msg":"BookSearch成功","body":{"id":1,"title":"junit","author":"coding"}}

위에처럼 나온다. 성공했을 시 code로는 1 , 메세지는 bookSearch성공, 바디에는 책에 관한 정보가 들어있다. (beforeEach로 설정한 값)

then // DocumentContext 의 dc로 정의하고 response의 데이터를 가져와 code와 title을 정의한다. 

코드와 타이틀을 비교해서 끝낸다. 

 


4. bookDelete Test

	@Sql("classpath:db/tableInit.sql")
	@Test
	public void deleteBook_test() {
		//given
		Integer id = 1;
		
		//when
		HttpEntity<String> request = new HttpEntity<>(null, headers);
		ResponseEntity<String> response = rt.exchange("/api/v1/book/" + id, HttpMethod.DELETE, request,  String.class);
		
		//then
		System.out.println(response.getStatusCode());
		DocumentContext dc = JsonPath.parse(response.getBody());
		Integer code = dc.read("$.code");
		
		assertThat(code).isEqualTo(1);
	}

이것도 바로 해석해보자 

given과 when은 거의 비슷하며 HttpMethod로 Delete를 설정해준다. 

then // System.out.println(response.getStatusCode()); 은 눈으로 확인하기 위해서 코드를 작성했다. 결과로는 아래

200 OK

간단하긴 하다. delete를 성공적이면 200 OK를 반환해준다. 

그래서 다른것과 동일하게 동작을 시키면 되고 검증작업도 code만을 확인하면 된다. 


5. bookUpdate Test

@Sql("classpath:db/tableInit.sql")
	@Test
	public void updateBook_test() throws Exception {
		//given
		Integer id = 1;
		BookSaveReqDto bookSaveReqDto = new BookSaveReqDto();
		bookSaveReqDto.setTitle("spring");
		bookSaveReqDto.setAuthor("seo-coding");
		
		String body = om.writeValueAsString(bookSaveReqDto);
		
		//when
		HttpEntity<String> request = new HttpEntity<>(body, headers);
		ResponseEntity<String> response = rt.exchange("/api/v1/book/" + id, HttpMethod.PUT, request,  String.class);
		
		//then
//		System.out.println("updateBook_test() : " + response.getStatusCodeValue());
//		System.out.println("updateBook_test() : " + response.getBody());

		DocumentContext dc = JsonPath.parse(response.getBody());
		String title = dc.read("$.body.title");
		assertThat(title).isEqualTo("spring");
	}

마지막으로 북 수정 테스트를 진행해보도록 하겠다. 

given // 기존 Data를 변경해야하는 작업이기에 DB에 데이터를 미리 작성해놔야 한다. 그래서 beforeEach를 사용한 것이고,  여기서 적은 데이터들은 Request데이터이다. 즉 책의 이름이나 게시물을 수정할 시 새롭게 덮어씌우는 데이터 이다. 

그래서 여기서는 id를 1로 적고 title과 Author을 bookSaveReqDto로 set을 한 것은 리퀘스트로 받았기 때문이다. 

String body로써는 ObjectMapper로 JSON값을 String으로 가져와 저장 해준다. 

when // 지금까지 작성한 코드와 같으며,, HttpMethod.PUT으로 설정해준다. 

then // title에는 Service의 기능이 아닌 Controller이기에 HTTP로써 설정한 값을 지정해준다. 

title = body에 저장한 값 즉 "spring"을 설정해주고 title과 "spring"을 비교해주면서 

Junit 10강까지 전부 해석을 끝냈습니다.. 다음에는 새롭게 프로젝트를 진행할 예정이라 

다음 프로젝트도 많이 지켜 봐주세요!!..

반응형

댓글