TDD의 정의 (테스트 주도 개발)
- Test Driven Development
테스트를 먼저 만들고 테스트를 통과하기 위한 코드를 작성하는 것입니다. 만드는 과정에서 우선 테스트를 작성하고 그걸 통과하는 코드를 만들기를 반복하면서 제대로 작동하는지에 대한 피드백을 반영하는 것입니다.
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
// Assertions의 assertThat에 대하여는 다음에 알아보도록하겠습니다.
class Tests {
@Test
@DisplayName("2, 3 => -1")
void t1() {
assertThat(new Solution().solution(2, 3)).isEqualTo(-1);
}
@Test
@DisplayName("11, 11 => 1")
void t2() {
assertThat(new Solution().solution(11, 11)).isEqualTo(1);
}
@Test
@DisplayName("7, 99 => -1")
void t3() {
assertThat(new Solution().solution(7, 99)).isEqualTo(-1);
}
}
테스트코드가 다 실패한 것을 확인할 수 있습니다. 이유는 현재는 Main 코드를 TDD형식으로 작성하여 return 값에 0을 주었기 때문에 실패하였습니다.
class Solution {
public int solution(int num1, int num2) {
return 0;
}
}
여기서 Main클래스를 TDD형식을 성공하도록 코드를 수정하는 것이 TDD의 방식입니다.
// System.out.println(new Solution().solution(2, 3)); // -1
// System.out.println(new Solution().solution(11, 11)); // 1
// System.out.println(new Solution().solution(7, 99)); // -1
class Solution {
public int solution(int num1, int num2) {
return num1 == num2 ? 1 : -1;
}
}
Main클래스에서 코드를 제대로 작성하고 실행하면 TDD가 성공적으로 완료된 것을 볼 수 있습니다.
이런식으로 처음에는 Test코드를 실패하도록 작성한다음에 성공을 목표로 하나씩 수정해나가는 것이 TDD 방식입니다.