테스트
프로그램의 품질을 검증하는 것
의도대로 프로그램이 잘 작동하는지 확인하는 과정
테스트 코드 작성법
1. 예상 데이터 작성하기
2. 실제 데이터 획득하기
3. 예상 데이터와 실제 데이터 비교해 검증하기
테스트 케이스
다양한 경우에 대비해 성공 / 실패할 경우를 가정해 만드는 상황(데이터)
test 디렉터리 위치
main > java > 프로젝트 > service > ArticleServiceTest
@SpringBootTest
스프링 부트와 해당 클래스를 연동해 테스트할 때 사용하는 어노테이션
테스트 코드에서 스프링 부트가 관리하는 다양한 객체를 주입받을 수 있음
@Test
해당 메서드가 테스트를 위한 코드라고 선언하는 어노테이션
테스트 케이스의 트랜잭션 처리
태스트 시 데이터를 조회하는 것이 아닌 조작(생성 / 수정 / 삭제)하는 작업을 했다면 테스트를 마치고 데이터를 롤백해야함(롤백하지 않을 시 조작된 데이터가 남아 조회과정에서 오류 발생가능)
테스트 메서드 위에 @Transactional 메서드를 붙여 처리
조회 / 생성 / 수정 / 삭제 Test메서드
@SpringBootTest
class ArticleServiceTest {
@Autowired
ArticleService articleService;
@Test
void index() {
//1. 예상 데이터
Article a = new Article(1L,"가가가가", "1111");
Article b = new Article(2L,"나나나나", "2222");
Article c = new Article(3L,"다다다다", "3333");
List<Article> expected = new ArrayList<Article>(Arrays.asList(a,b,c));
//2. 실제 데이터
List<Article> articles = articleService.index();
//3. 비교 및 검증
assertEquals(expected.toString(),articles.toString());
}
@Test
void show_성공_존재하는_id_입력() {
//1. 예상 데이터
Long id = 1L;
Article expected = new Article(id,"가가가가", "1111");
//2. 실제 데이터
Article article = articleService.show(id);
//3. 비교 및 검증
assertEquals(expected.toString(),article.toString());
}
@Test
@Transactional
void show_실패_존재하지_않는_id_입력() {
//1. 예상 데이터
Long id = -1L;
Article expected = null;
//2. 실제 데이터
Article article = articleService.show(id);
//3. 비교 및 검증
assertEquals(expected,article);
}
@Test
@Transactional
void create_성공_title과_content만_있는_dto_입력() {
//1. 예상 데이터
String title = "라라라라";
String content = "4444";
ArticleForm dto = new ArticleForm(null,title, content);
Article expected = new Article(4L,title,content);
//2. 실제 데이터
Article article = articleService.create(dto);
//3. 비교 및 검증
assertEquals(expected.toString(),article.toString());
}
@Test
@Transactional
void create_실패_id가_포함된_dto_입력() {
//1. 예상 데이터
Long id = 4L;
String title = "라라라라";
String content = "4444";
ArticleForm dto = new ArticleForm(id,title, content);
Article expected = null;
//2. 실제 데이터
Article article = articleService.create(dto);
//3. 비교 및 검증
assertEquals(expected,article);
}
@Test
@Transactional
void update_성공_존재하는_id와_title_content가_있는_dto_입력() {
//1. 예상 데이터
Long id = 1L;
String title = "키키키키";
String content = "5555";
ArticleForm dto = new ArticleForm(id,title,content);
Article expected = new Article(id,title,content);
//2. 실제 데이터
Article article = articleService.update(id,dto);
//3. 비교 및 검증
assertEquals(expected.toString(),article.toString());
}
@Test
@Transactional
void update_성공_존재하는_id와_title만_있는_dto_입력() {
//1. 예상 데이터
Long id = 1L;
String title = "키키키키";
ArticleForm dto = new ArticleForm(id,title,null);
Article expected = new Article(id,title,"1111");
//2. 실제 데이터
Article article = articleService.update(id,dto);
//3. 비교 및 검증
assertEquals(expected.toString(),article.toString());
}
@Test
@Transactional
void update_실패_존재하지_않는_id의_dto_입력() {
//1. 예상 데이터
Long id = -5L;
String title = "키키키키";
String content = "5555";
ArticleForm dto = new ArticleForm(id,title,content);
Article expected = null;
//2. 실제 데이터
Article article = articleService.update(id,dto);
//3. 비교 및 검증
assertEquals(expected,article);
}
@Test
@Transactional
void delete_성공_존재하는_id_입력() {
//1. 예상 데이터
Long id = 1L;
Article expected = new Article(id,"가가가가","1111");
//2. 실제 데이터
Article article = articleService.delete(id);
//3. 비교 및 검증
assertEquals(expected.toString(),article.toString());
}
@Test
@Transactional
void delete_실패_존재하지_않는_id_입력() {
//1. 예상 데이터
Long id = -1L;
Article expected = null;
//2. 실제 데이터
Article article = articleService.delete(id);
//3. 비교 및 검증
assertEquals(expected,article);
}
}