테스트 코드 작성하기

1. 테스트 코드 기본 틀 만들기

@SpringBootTest // 해당 클래스를 스프링 부트와 연동하여 테스트
class ArticleServiceTest {
    @Autowired
    ArticleService articleService; // articleService 객체 주입

    @Test
    void index() {

2. index() 테스트하기

		@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)); // a, b, c 합치기

        // 2. 실제 데이터
        List<Article> articles = articleService.index();

        // 3. 비교 및 검증
        assertEquals(expected.toString(), articles.toString());
    }

3. show() 테스트하기

	  @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
		void show_실패_존재하지_않는_id_입력() { // 메서드 이름 수정
        // 1. 예상 데이터
        Long id = -1L;
        Article expected = null; // 예상 데이터 저장

        // 2. 실제 데이터
        Article article = articleService.show(id); // 실제 데이터 저장

        // 3. 비교 및 검증
        assertEquals(expected, article); // 비교

    }

4. create() 테스트하기

	  @Test
    void create_성공_title과_content만_있는_dto_입력() { // // 메서드 이름 수정
        // 1. 예상 데이터
        String title = "라라라라";  // title과 content 값 임의 배정
        String content = "4444";   // title과 content 값 임의 배정
        ArticleForm dto = new ArticleForm(null, title, content); // dto 생성
        Article expected = new Article(4L, title, content); // 예상 데이터 저장

        // 2. 실제 데이터
        Article article = articleService.create(dto); // 실제 데이터 저장

        // 3. 비교 및 검증
        assertEquals(expected.toString(), article.toString()); // 비교
    }
 	  @Test
    void create_실패_id가_포함된_dto_입력() { // 메서드 이름 수정
        // 1. 예상 데이터
        Long id = 4L;              // title과 content 값 임의 배정
        String title = "라라라라"; // title과 content 값 임의 배정
        String content = "4444";  // title과 content 값 임의 배정
        ArticleForm dto = new ArticleForm(id, title, content);  // dto 생성
        Article expected = null;                                // 예상 데이터 저장

        // 2. 실제 데이터
        Article article = articleService.create(dto);  // 실제 생성 결과 저장

        // 3. 비교 및 검증
        assertEquals(expected, article);  // 비교
    }

5. 여러 테스트 케이스 한 번에 실행하기

// 트랜적션 패키지 임포트
import org.springframework.transaction.annotation.Transactional;
(중략)
@Test
@Transactional // 어노테이션 추가
void create_성공_title과_content만_있는_dto_입력() {
(중략)
}
@Transactional // 어노테이션 추가
void create_실패_id가_포함된_dto_입력() {
(중략)
}

마무리

  1. 테스트
  2. 테스트 코드 작성법
    1. 예상 데이터 작성하기
    2. 실제 데이터 확득하기
    3. 예상 데이터와 실제 데이터 비교하여 검증하기
  3. 테스트 케이스
  4. test 디렉터리 위치
  5. @SpringBootTest