TDD란?
TDD(Test Driven Development)란 '테스트 주도 설계'라고 하여 테스트를 먼저 만들고 실제 서비스 될 코드를 작성하는 개발방법론 중 하나이다.
TDD 작성의 장점은 객체지향적인 코드 개발이 가능하며, 설계 수정 및 디버깅의 시간을 단축하고, 유지보수가 용이하며, 오버 엔지니어링의 방지가 되는 점이 있다.
단점은 개발에 소요되는 시간이 증가하고, 테스트 코드가 짜는것이 어렵다는 점이다.
1. 테스트 코드를 작성하는 이유
테스트 코드를 작성하지않으면 문제를 빠르게 파악하기 힘들고, 한번의 수행을 위해 아래의 과정을 반복 해야지 테스트가 가능하다.
1. 코드 작성 > 2. 서버 실행 > 3. 코드 요청 수행 > 4. 요청결과를 디버깅
위 과정을 문제가 해결될때까지 반복해야하는데,
테스트코드를 작성하면 이 귀찮은 작업을 반복하지않고 테스트코드만 실행시켜서 검증할수있다.
2. JUnit
이러한 테스트 코드 작성을 도와주는 테스팅 프레임워크 JUnit 이 있다.
Java언어를 지원하는 프레임워크가 JUnit이고, 테스팅 프레임워크를 통칭하여 xUnit이라고 한다.
C언어는 Cunit, Python은 PyUnit등..
3. 기본 문법
문법 | 설명 |
@ExtendWith(MockitoExtension.class) |
mokito를 사용하기위함. (JUnit4의 @RunWith(SpringRunner.class) 와 같음). Junit 5부터는 좀더 강력한 확장어노테이션인 ExtendWith를 사용한다고 한다. 번외로, JUnit4같은 경우 통합테스트를 위해 @SrpingBootTest를 사용할 경우 @RunWith(SpringRunner.class)을 꼭 추가해줘야 하는데, JUnit5같은 경우는 이미 @SpringBootTest안에 있으므로 추가하지 않아도 된다. |
@Test |
JUnit5는 기본적으로 'no access modifier'를 Public으로 간주하여 public없이 정의 된 테스트 케이스를 허용한다고 한다. |
@BeforeEach / @AfterEach |
각 테스트 메서드를 실행하기 전/후에 실행된다. 5개의 테스트가 있는경우 각 어노테이션이 달린 메소드는 각 테스트 케이스 별로 5번 실행된다. |
@BeforeAll / @AfterAll |
테스트 클래스의 모든 테스트 메서드가 실행되기 전/후에 실행된다. Each와 다르게 테스트 클래스 당 한번 실행된다. |
@Disabled |
JUnit4의 @Ignore. 테스트 케이스 diable 처리 |
@Tag |
JUnit4의 @Category. 테스트 필터링. 실행할 테스트를 포함하거나 해당 카테고리에 따라 필터링하여 제외할 수 있다. |
@DisplayName |
test runner에 출력될 이름을 지정할 수있다. 따라서 기존 junit4에서는 메서드 이름이 곧 테스트 케이스명 이였는데, 이름이 길어지는 단점을 보완하고 메서드를 한글로 작성하던 찜찜함을 덜 수있다. |
@ParameterizedTest @ValueSource |
데이터 변형이 있는 메소드를 여러번 실행할때 사용됨. |
- 예시 :
@DisplayName("공백 문자열 테스트")
@ParameterizedTest(name = "문자열 {0}으로 조회")
@ValueSource(strings = " ", "")
public void isBlankStringTest(String source) {
boolean isBlank = service.isBlank(source);
assertTrue(isBlank);
}
4. JUnit4 vs JUnit5
'IT > JAVA' 카테고리의 다른 글
[Java] Garbage Collection(가비지 컬렉션)이란? (0) | 2022.03.15 |
---|---|
[Java] 자바의 동시성 (Concurrency) (0) | 2022.03.15 |
프록시환경에서 clientIP 얻기 (0) | 2021.12.17 |
[JAVA] 객체지향프로그래밍(OOP)란? (0) | 2021.07.12 |
[JAVA] 오버로딩과 오버라이딩의 차이 (0) | 2021.07.12 |