// service - BlogService.java
@RequiredArgsConstructor
@Service
public class BlogService {
private final BlogRepository blogRepository;
~ 생략 ~
public void delete(long id) {
blogRepository.deleteById(id);
}
}
// controller - BlogApiController.java
@RequiredArgsConstructor
@RestController // HTTP Response Body에 객체 데이터를 JSON 형식으로 반환하는 컨트롤러
public class BlogApiController {
private final BlogService blogService;
~ 생략 ~
@DeleteMapping("/api/articles/{id}")
public ResponseEntity<Void> deleteArticle(@PathVariable long id){
blogService.delete(id);
return ResponseEntity.ok().build();
}
}
Given : 블로그 글을 저장한다.
When : 저장한 블로그 글의 id 값으로 삭제 API를 호출한다.
Then : 해당 id의 블로그 글이 남아있는 지를 확인한다.
// test - BlogApiControllerTest
@SpringBootTest // 테스트용 애플리케이션 컨텍스트
@AutoConfigureMockMvc // MockMvc 생성
class BlogApiControllerTest {
@DisplayName("deleteArticle: 블로그 글 삭제에 성공한다.")
@Test
public void deleteArticle() throws Exception {
// given
final String url = "/api/articles/{id}";
final String title = "title";
final String content = "content";
Article savedArticle = blogRepository.save(Article.builder()
.title(title)
.content(content)
.build());
// when
mockMvc.perform(delete(url, savedArticle.getId()))
.andExpect(status().isOk());
// then
assertThat(blogRepository.findById(savedArticle.getId())).isEmpty();
}
}
assertThat(blogRepository.findById(savedArticle.getId())).isEmpty();
: 해당 id에 해당하는 블로그 글의 객체가 존재하는 지를 확인한다.
- blogRepository.findById(savedArticle.getId())의 반환 값은 Optional
<Article>
타입이다.
- Optional
<T>
는 Java 8에서 도입된 클래스로, null이 올 수 있는 값을 감싸는 Wrapper 클래스이다.