시작하기 전에
불친절하지만 누군가에게 도움이 될 junit 예시이다.
class Something
아래와 같은 Something class를 DTO로 사용한다고 하자.
public class Something {
private String id;
private String name;
private String desc;
}
constructor, getter, setter 등은 생략했다.
junit Test
메소드의 parameter들에 대한 설명은 다른 곳에서 볼 수 있으므로 생략한다.
getForEntity
@Test
public void getSomethingTest() {
int somethingId = 26;
ResponseEntity<JSONObject> response = restTemplate.getForEntity("/something/{somethingId}", JSONObject.class, somethingId);
// 결과로 받은 Http Status Code가 200이 아니면 assert
assertEquals(response.getStatusCode(), HttpStatus.OK);
}
postForEntity
@Test
public void postSomethingTest()
Something s = new Something();
project.setName("something");
project.setDesc("something to post");
ResponseEntity<JSONObject> response = restTemplate.postForEntity("/something", s, JSONObject.class);
assertEquals(response.getStatusCode(), HttpStatus.OK);
}
patch - exchange 사용
patchForObject를 쓰려고도 해봤고.. 그렇지만 잘 되지 않아서 exchange를 사용했다.
@Test
public void updateSomethingDescTest() {
int somethingId = 26;
Something s = new Something();
s.setDesc("patch test");
final HttpEntity<Something> request = new HttpEntity<Something>(s);
ResponseEntity<Void> response = restTemplate.exchange("/something/{somethingId}",
HttpMethod.PATCH, request, Void.class, somethingId);
assertEquals(response.getStatusCode(), HttpStatus.OK);
// update가 정상적으로 되었는지 확인하기 위해
// somethingDao.readSomethingBySomethingId로 받아낸 something 객체에 있는 desc와 바꾸고자 했던 desc 값이 같은지 확인
assertEquals(s.getDesc(), somethingDao.readSomethingBySomethingId(somethingId).getDesc());
}
delete - exchange 사용
http status code를 응답받으려면 rest template의 delete 메소드가 아닌 exchange를 써야했다.
(delete 메소드는 return type이 void)
@Test
public void deleteSomethingTest() {
int somethingId;
ResponseEntity<Void> response = restTemplate.exchange("/something/{somethingId}",
HttpMethod.DELETE, null, Void.class, somethingId);
assertEquals(response.getStatusCode(), HttpStatus.OK);
}
테스트를 통해 생성된 것을 이어서 수정/삭제
뭐라고 표현해야 할 지 모르겠다 ^^.. 생성된 것의 정보로 수정/삭제 테스트?
아무튼, 테스트를 통해 생성된 어떤.. 개체?의 아이디(PK)를 바로 받아와서 바로 수정/삭제 테스트에도 사용하는 예시다.
이를 위해서는 post의 response에 방금 생성된 것의 PK가 전달되어야 하고, (여기서는 Json 가정)
그 값을 이용해 DB에서 해당 정보를 한번 더 받아와야 한다.
그래서 바꾸려고 주었던 것과 일치하는지 확인하여, 다르면 assert를 주면 된다.
@Test
public void createAndDeleteSomethingTest() {
Something s = new Something();
project.setName("something");
project.setDesc("something to post");
ResponseEntity<JSONObject> response = restTemplate.postForEntity("/something", something, JSONObject.class);
assertEquals(response.getStatusCode(), HttpStatus.OK);
// post의 결과가 생성된 Something의 ID (json 형식) 일 때 아래와 같이 delete를 이어서 테스트 할 수 있다.
deleteSomethingTest((Integer)response.getBody().get("somethingId"));
}
public void deleteSomethingTest(int somethingId) {
ResponseEntity<Void> response = restTemplate.exchange("/something/{somethingId}",
HttpMethod.DELETE, null, Void.class, somethingId);
assertEquals(response.getStatusCode(), HttpStatus.OK);
}
'Programming > Java' 카테고리의 다른 글
[Spring] JSON 형식으로 request, response하기 (0) | 2020.01.12 |
---|---|
[Java] Hashtable VS HashMap VS ConcurrentHashMap (0) | 2019.11.12 |
[Java] synchronized 메소드와 일반 메소드로 같은 자원에 접근하면 thread-safe할까? (0) | 2019.11.12 |
[Java] Garbage Collection (GC) 알고리즘 (1) | 2019.11.11 |
JDK vs JRE vs JVM (0) | 2019.11.05 |