테스트코드
테스트 코드란
서버를 실행하지 않고 작성한 코드가 제대로 작동하는지 알아보기 위해 따로 만들어 둔 코드를 의미합니다.
테스트 코드의 장점
-
서버를 실행하지 않기에 시간을 절약할 수 있습니다. (자동검증)
-
전체가 아닌 단위 테스트를 할 수 있기에 시간이 단축되고 효율적입니다.
-
문제를 조기에 발견할 수 있습니다.
-
추 후 코드를 리팩토링하거나 라이브러리 업그레이드 시 기존기능이 잘 작동하는지 확인할 수 있습니다.(ex. 회귀테스트)
-
테스트 코드엔 개발자가 작성한 메소드가 어떻게 동작하면 어떤 결과가 반환되는지 작성하기 때문에 처음 보는 개발자들이 이를 보고 코드의 기능을 유추하기가 쉬워집니다. (문서화 가능)
테스트 기본 원칙
테스트의 종류는 단위테스트, 통합 테스트, 승인 테스트 등 다양합니다. 각 테스트의 목적과 상황에 맞게 테스트를 하되 원칙을 지키는 게 먼저입니다.
Seven Testing Principles : 7 테스트 원칙
- 테스팅은 결함의 존재를 보여준다.
- 완벽한 테스트는 불가능하다.
- 테스트 구성은 가능한 빠른 시기에 시작한다.
- 결함은 군집돼 있다.
- 살충제 역설 : 비슷한 테스트가 반복되면 새로운 결함을 발견할 수 없다.
F.I.R.S.T 단위 테스트 원칙
- Fast : 빨라야한다.
- Isolated : 다른 테스트에 종속적인 테스트는 작성하지 않는다.
- Repeatable : 테스트는 실행할 때마다 같은 결과를 도출한다.
- Self-validating : 자동검증이 가능하다. 수동으로 미리 만들어야 동작하는 테스트는 작성하지 않는다.
- Timely : 프로덕션 코드가 테스트를 성공하기 직전에 구성돼야 한다.
테스트 코드 작성법
- 테스트할 클래스(main 폴더)와 같은 디렉토리(test폴더)에 테스트코드 클래스를 생성
- 클래스명은 관례상 테스트클래스명 +Test의 조합으로 (JUnit4부턴 이런 이름이 아니어도 작동)
- alt +Enter르 누르고 create Test를 선택
- 테스트 클래스는 반드시 public으로 선언
- 테스할 메소드 작성 ; JUnit함수 사용
- @Test 선언한 메소드는 JUnit이 자동으로 실행
예시 : Member 개체 생성 확인 및 setter getter기능 테스트코드 작성
참고로 개발환경은 다음과 같습니다. ‘’’
- IntelliJ IDEA 2021.2.1
- Mysql 8.0.20
- JAVA 8(1.8)
- Spring Boot 2.5.4
- Junit5 ‘’’
먼저 Member 클래스에 Member Entity를 다음과 같이 만들고 테스트를 위해 @Builder로 빌더패턴을 생성해 줍니다.
Member entity가 제대로 생성이 됐는지 테스트하기 위해서
test 폴더 아래 같은 디렉토리에 MemberTest라는 클래스를 생성해줍니다.
생성된 클래스 에서 public class 뒤에 나오는 클래스명에 커서를 두고 Alt + Enter를 누른 뒤 Create Test를 클릭해줍니다.
testing library에선 테스트 프레임 워크 Junit의 버전을 선택할 수 있는데 저는 가장 최신 버전 5를 사용했는데 아직까지 4를 더 많이 쓰고 있다고 하네요.
생성된 테스트 클래스에서 아래와 같이 member 필드값을 입력 후 id를 getter로 가져온 뒤 assertEquals(“admin”,id)로 입력값이 저장값과 같은지 test하는 함수를 작성합니다.
Ctrl +Shift +f10 또는 해당 test 함수 옆 초록색 세모를 클릭 -> run 테스트함수를 해주면 아래와 같이 콘솔창에 결과 값이 나옵니다.
테스트 결과 😎😎 입력값(admin)이 저장값(id)과 같으므로 Entity가 잘 형성 돼 getter setter가 작동됨을 알 수 있습니다.
다만, 지금은 null값이 나오면 안되는 값들을 모두 입력해서 오류가 나지 않고 test passed된건데요. 만약 그 중에 하나라도 빼먹으면
이렇게 test failed 됐다고 나와야 합니다. 이부분이 그냥 통과된다면 Entity builder가 문제가 있거나 불안전한 빌더패턴, nullable= false설정이 안된 것이므로 개체 클래스를 수정하셔야 합니다.
JUnit 대표적인 함수들
함수명 | 기능 |
---|---|
assertEquals(a, b) | a와 b의 값이 일치하는지 확인 |
assertSame(a, b) | a 와 b가 동일한 객체인지(값 말고 레퍼런스) 확인 |
assertArrayEquals(a, b) | 배열 a와 b의 값이 일치하는지 확인 |
assertFalse(a) | a가 false인지 확인 |
assertTrue(a) | a가 참인지 확인 |
assertNull(a) | a가 null인지 확인 |
assertNotNull(a) | a가 null이 아닌지 확인 |
참조
📖 스프링 부트와 AWS로 혼자 구현하는 웹 서비스이동욱 저
댓글남기기