JUNIT 단위 테스트는 매우 중요하다.
항상 테스트로 검증을 통과하고 다음 단계로 진행하지 않으면
나중엔 어디서 어떤 문제가 발생했는지 찾기가 매우 어려워진다.
예를 들어 JUNIT 단위 테스트로 DB에 문제가 없음을 검증을 했다면
뒤에 문제가 발생했을 때 View 혹은 Controller 에서 문제가 발생했음을 알 수 있다.
BoardRepository 테스트 해보기
1. 테스트 환경 만들기
1-1. test폴더
main폴더가 아닌 test폴더에서 main의 폴더와 경로를 같게 해서 borad 패키지를 만들고
테스트 클래스를 만들어 준다. 테스트용 클래스 이름은 클래스명 + Test를 붙이는 것이 약속이다.


1-2. 테스트 클래스 설정
@DataJPATest : database와 databaseFramework 테스트
@Import(클래스명.class) : 현재 테스트할 클래스(Repository)
테스트할 BoardRepository를 멤버 변수로 만들어서 @Autowired로 주입.
@Test : 테스트할 메서드 위에 붙임
테스트할 메서드 이름에 _test를 붙이는 것이 약속이므로
db에 insert하는 테스트를 할 것이라 save_test()로 이름 짓고 @Test 어노테이션을 붙여줬다.
테스트 메서드 내부에서는 given, when, eye로 나누는데
//given
테스트 메서드는 멤버변수를 받을 수 없기 때문에 여기서 변수를 만들어 준다.
//when
여기서 테스트를 해본다.
//eye
그냥 보기만 한다.
원래 //eye 대신 //then을 사용한다
// eye는 눈으로 보는 것. 로그에 출력만 해서 확인하는 것이고 테스트 환경이 익숙하지 않을 때.
// then은 코드로 확인하는 것이다. 이는 JUNIT 단위 테스트(2)에서 해본다.
1-3. 테스트 코드

2. 테스트 실행
2-1. 테스트 성공
테스트를 실행해보면 insert 쿼리가 잘 떴다. 그리고 왼쪽에 테스트도 통과 표시가 됐다.

테스트는 로그 메시지를 잘 봐야 하는데 실패의 경우 위에서부터 확인한다.
테스트 돌리기 전에 로그창을
우클릭
한 뒤 clear all
해서 로그창을 비우고 진행한다.2-1. 테스트 실패의 중요성
테스트의 성공도 중요하겠지만 어떤 제약을 걸어뒀을 때
우리가 걸어둔 제약이 잘 적용되나 반드시 확인 해봐야 한다.
table용으로 만든 Board에 title컬럼과 content컬럼은
@Column(nullable=false)
을 붙여서 Not Null 속성을 가지고 있기 때문에 null값 허용 안 됨
그래서 이 상태에서 null값을 주고 테스트를 해보면 에러가 떠야 한다.
서버를 실행해보면 title 과 content컬럼에 Not Null 속성이 붙은 것을 확인할 수 있다.

걸어둔 제약이 잘 적용이 되는지 title에 null값을 주고 단위 테스트를 진행해보면
null을 허용하지 않은 title컬럼의 값에 null이 들어가서 에러가 발생했다.

title에 null이 아닌 문자열을 넣어주고 다시 단위 테스트를 진행해보면.
테스트 성공!
database에 insert 하는 과정을 테스트 하는데 db쪽엔 문제가 없었으므로
뒤에 문제가 발생한다면 Model은 일단 문제 없다고 보고
View 혹은 Controller를 먼저 살펴봐야 할 것이다.

Share article