13.1 테스트란
테스트
test, 프로그램이 의도대로 작 작동하는 확인하는 과정으로 프로그램의 품질을 검증
데스트 코드
코드를 검증하는 과정
테스트를 통과하면 리팩토링 후 코드를 개선하지만, 실패하는 경우 디버깅 과정을 거쳐 오류 수정
i) 예상 데이터 작성하기
ii) 실제 데이터 획득하기
iii) 예상 데이터와 실제 데이터 비교해 검증하기
테스트 케이스
성공, 실패를 모두 고려하여 다양한 경우의 테스트 코드를 대비
테스트 주도 개발
Test Drvien Development (TDD), 테스트 코드를 만든 후 이를 통과하는 최소한의 코드를 시작점으로 점차 코드를 개선 및 확장하는 방식
13.2 테스트 코드 작성하기
테스트 코드 기본 틀
Service의 메소드에서 오른쪽 마우스를 클릭해 Generate▶Test 선택
//해당 클래스를 스프링 부트와 연동하여 통합 테스트를 수행
@SpringBootTest
class ArticleServiceTest {
@Autowired
ArticleService articleService;
//해당 메소드를 테스트 코드로 선언
@Test
void index() {
}
}
index( ) 테스트
테스트 순서를 주석으로 작성하고 articleService.index( ) 메소드를 호출하여 List<Article> 타입 articles에 결과 저장
@Test
void index() {
//예상 데이터
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));
//실제 데이터
List<Article> articles = articleService.index();
//비교 및 검증
assertEquals(expected.toString(), articles.toString());
}
assertEquals (x,y)
예상 데이터 (x)와 실제 데이터 (y)를 비교해 일치하면 테스트를 통과하는 메소드
show( ) 테스트
@Test
void show_성공_존재하는_id() {
//예상 데이터
Long id = 1L;
Article expected = new Article(id, "가가가가", "1111");
//실제 데이터
Article article = articleService.show(id);
//비교 및 검증
assertEquals(expected.toString(), article.toString());
}
@Test
void show_실패_존재하지않는_id() {
//예상 데이터
Long id = -1L;
Article expected = null;
//실제 데이터
Article article = articleService.show(id);
//비교 및 검증
assertEquals(expected, article);
}
create( ) 테스트
@Test
void create_성공_title_content에_있는_dto() {
//예상 데이터
String title = "라라라라";
String content = "4444";
ArticleForm dto = new ArticleForm(null, title, content);
Article expected = new Article(4L, title, content);
//실제 데이터
Article article = articleService.create(dto);
//비교 및 검증
assertEquals(expected.toString(), article.toString());
}
@Test
void create_실패_id가_포함된_dto() {
//예상 데이터
Long id = 4L;
String title = "라라라라";
String content = "4444";
ArticleForm dto = new ArticleForm(id, title, content);
Article expected = null;
//실제 데이터
Article article = articleService.create(dto);
//비교 및 검증
assertEquals(expected, article);
}
여러 테스트 케이스 한 번에 실행
ArticleServiceTest 클래스 전체를 실행해 모든 테스트 케이스를 동시에 실행
이때, 각 테스트는 종료 후 롤백을 실행해야 하므로 메소드 위에 @Transactional 어노테이션을 추가
: 롤백이 발생하지 않는 경우 테스트로 조작된 데이터가 남아 테스트 수행을 방해
'백엔드 > 스프링 부트 3_자바 백엔드' 카테고리의 다른 글
14. 댓글 엔티티와 리파지터리 만들기 (0) | 2025.01.11 |
---|---|
12. 서비스 계층과 트랜잭션 (0) | 2025.01.11 |
11. HTTP와 REST 컨트롤러 (0) | 2025.01.04 |
10. RESET API와 JSON (0) | 2025.01.04 |
9. CRUD와 SQL 쿼리 종합 (0) | 2025.01.04 |