테스트(Test)
란 프로그램의 품질을 검증하는 것으로, 의도대로 프로그램이 잘 동작하는 지 확인 하는 과정.
사람이 직접 일일이 요청
을 보내고 응답
을 받아 확인하는 방법이 아닌, 테스트
도구를 이용해서 반복적인 검증 절차
를 자동화
할 수 있음.
테스트 코드 작성 방식.
예상 데이터
작성.실제 데이터
획득.비교
, 검증
.작성한 코드가 테스트를 통과하면 지속적인 리팩토링
으로 코드를 개선
하고, 통과하지 못했다면 잘못된 부분을 찾아서 디버깅(debugging)
을 해야함.
디버깅
이란?테스트 코드는 작성시 다양한 경우의 수를 따져서 작성함.
테스트 케이스(Test case)
라고 함.테스트 주도 개발(TDD, Test Driven Development)
란?JUnit5
단위 테스트(Unit Test)
를 작성하고 실행할 수 있도록 해주는 테스트 프레임워크(Framework).
@Test
@SpringBootTest
클래스
를 스프링 부트
와 연동해서 통합 테스트
를 수행하겠다고 선언.테스트 코드
에서 스프링 부트
가 관리하는 다양한 객체
를 주입
받을 수 있음.@SpringBootTest
class ArticleServiceTest {
@Autowired
ArticleService articleService;
@Test
void index() {
Article a = new Article(1L, "안녕하세요", "반가워요");
Article b = new Article(2L, "안녕", "반가워");
Article c = new Article(3L, "안녕하세요 반가워요", "네 반가워요");
List<Article> expected = new ArrayList<Article>(Arrays.asList(a, b, c));
List<Article> articles = articleService.index();
assertEquals(expected.toString(), articles.toString());
}
}
@Autowired ArticleService articleService;
assertEquals(expected.toString(), articles.toString());
assertEquals
를 이용해서 예상 데이터와 실제 데이터를 비교하고 두 값이 일치하면 통과.JUnit5
에서 제공하는 메서드.Arrays.asList()
메서드.정적 리스트
로 만들어서 반환.정적 리스트
는 크기가 고정되어 있어서 add()
, remove()
메서드 사용 불가.add()
, remove()
메서드를 사용하려면 정적 리스트
를 일반 리스트
로 새로 만들어야 됨.new ArrayList<Article>(Arrays.asList(a, b, c))
Arrays.asList()
메서드로 합친 정적 리스트
를 새 ArrayList
로 만들었음.예상 데이터와 실제 데이터가 같은 경우, (테스트 합격)
예상 데이터와 실제 데이터가 다를 경우, (테스트 불합격)
@Test
void show_실패_존재하지_않는_id입력() {
Long id = -1L;
Article expected = null;
Article article = articleService.show(id);
assertEquals(expected, article);
}
id = -1L;
expected = null
.null
은 toString()
메서드를 호출할 수 없으므로 값 그대로를 비교. @Test
void create_성공_title과_content만_있는_dto입력() {
String title = "연말 잘 보내세요";
String content = "올 한 해도 수고하셨습니다";
ArticleForm dto = new ArticleForm(null, title, content);
Article expected = new Article(4L, title, content);
Article article = articleService.create(dto);
assertEquals(expected.toString(), article.toString());
}
ArticleForm dto = new ArticleForm(null, title, content);
id
는 DB에서자동으로 생성해주니깐 써줄 필요없음.index()
(= 전체 데이터 조회) 만 통과하지 못했음.id=4
값의 데이터가 있는 것을 확인.생성(create)
, 수정(update)
, 삭제(delete)
와 같이 데이터에 변화가 생기는 테스트들은 트랜잭션(@Transactional)
으로 묶어서 테스트가 종료된 후 초기상태로 돌아가도록 롤백 처리 해줘야함.