간단한 Restful API 만들고 테스트 코드 작성
User 에 대하여 RESTful API를 만들어본다.
User 객체.
@Data
public class User {
private Long id;
private String name;
private Integer age;
}
어 ? @Data 저거는 뭐지? 하는 분들을 위해 lombok 이라는 라이브러리를 간단하게 설명드린다.
lombok 은 java에서 객체를 만들때 getter , setter 코드를 컴파일 단계에서 자동으로 만들어주는 라이브러리다. 이놈 없이도 개발 가능하지만 getter, setter 만 만들다가 중도에 포기할수도 있다.
pom.xml 에 추가한다.
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
Controller 작성
@RestController
@RequestMapping(value = "/users")
public class UserController {
static Map<Long, User> users = Collections.synchronizedMap(new HashMap<Long, User>());
@GetMapping("/")
public List<User> getUserList() {
List<User> r = new ArrayList<User>(users.values());
return r;
}
@PostMapping("/")
public String postUser(@RequestBody User user) {
users.put(user.getId(), user);
return "success";
}
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return users.get(id);
}
@PutMapping("/{id}")
public String putUser(@PathVariable Long id, @RequestBody User user) {
User u = users.get(id);
u.setName(user.getName());
u.setAge(user.getAge());
users.put(id, u);
return "success";
}
@DeleteMapping("/{id}")
public String deleteUser(@PathVariable Long id) {
users.remove(id);
return "success";
}
}
테스트 코드 작성
@RunWith(SpringRunner.class)
@SpringBootTest
public class Chapter21ApplicationTests {
private MockMvc mvc;
@Before
public void setUp() {
mvc = MockMvcBuilders.standaloneSetup(new UserController()).build();
}
@Test
public void testUserController() throws Exception {
RequestBuilder request;
request = get("/users/");
mvc.perform(request)
.andExpect(status().isOk())
.andExpect(content().string(equalTo("[]")));
request = post("/users/")
.contentType(MediaType.APPLICATION_JSON)
.content("{\"id\":1,\"name\":\"테스트 합니다.\",\"age\":20}");
mvc.perform(request)
.andExpect(content().string(equalTo("success")));
request = get("/users/");
mvc.perform(request)
.andExpect(status().isOk())
.andExpect(content().string(equalTo("[{\"id\":1,\"name\":\"테스트 합니다.\",\"age\":20}]")));
request = put("/users/1")
.contentType(MediaType.APPLICATION_JSON)
.content("{\"name\":\"테스트 합니다.\",\"age\":30}");
mvc.perform(request)
.andExpect(content().string(equalTo("success")));
request = get("/users/1");
mvc.perform(request)
.andExpect(content().string(equalTo("{\"id\":1,\"name\":\"테스트 합니다.\",\"age\":30}")));
request = delete("/users/1");
mvc.perform(request)
.andExpect(content().string(equalTo("success")));
request = get("/users/");
mvc.perform(request)
.andExpect(status().isOk())
.andExpect(content().string(equalTo("[]")));
}
}
MockMvc 를 처음 사용해 보시는 분이라면 일부 함수가 존재 하지 않는다는 메시지가 있을것이다.
상단에 아래 패키지들이 잘 import 되었는지도 살피자!
import static org.hamcrest.Matchers.equalTo;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
끝!
Last updated