앱을 개발하며 기능을 하나씩 만들어낼때 마다 빌드하여 결과를 확인하는 것은 예기치 못한 오류가 발생할수도 있습니다. 이를 위해서 TDD라는 개념이 탄생하였는데요. 다만, TDD는 오류를 줄일 수 있다는 점에서 굉장히 사랑받고 있지만서도 생산성이 떨어진다는 단점이 있으니, 프로젝트 상황에 따라 TDD 도입을 고민해봐야 합니다.
Flutter에서는 Test 라이브러리를 이용하여 간편하게 Test 코드를 작성하고 실행해볼 수 있습니다. 그렇기에 이번에는 TDD를 위한 기본적인 단위테스트(Unit Test)를 하는 방법에 대해서 알아보겠습니다.
단위테스트(Unit Test)는 프로그램의 가장 기본적인 단위인 모듈을 테스트 하는것을 의미합니다. 그런 의미에서 모듈테스트라고도 할 수 있습니다. TDD에서도 가장 무난하게 사용하는것이 바로 단위테스트이죠.
Flutter 프로젝트에서 단위 모듈이란 무엇일까요? OOP를 이용하여 프로그램을 작성하고 있다면, controller, service, repository 등등이 있을것입니다. 하지만 여기서는 가장 기본적인 Counter를 만들어서 확인해보겠습니다.
저희가 만들 Counter는 초기에 0이라는 값을 가지고 있습니다. 그리고 increase, decrease함수를 통해서 그 값에 1을 더하거나 빼는 기능이 있다고 하겠습니다. 이 정보를 바탕으로 아래의 class를 만들어볼 수 있습니다.
class Counter {
int value = 0;
void increase() => value++;
void decrease() => value--;
}
이제 Counter를 위한 단위테스트 코드를 작성해보죠. 테스트는 다음과 같은 것들을 확인해야하겠죠?
- Counter의 초기 값은 0이다.
- Counter의 increase함수는 값에 1을 더한다.
- Counter의 decrease함수는 값에 1을 뺀다.
따라서, 3가지의 테스트 케이스를 작성할 수 있을것입니다.
void main() {
group("Counter Unit Test", () {
test("Initial Counter Value", () {
final counter = Counter();
expect(counter.value, 0);
});
test("Counter's Increase Function", () {
final counter = Counter();
counter.increase();
expect(counter.value, 1);
});
test("Counter's Decrease Function", () {
final counter = Counter();
counter.decrease();
expect(counter.value, -1);
});
});
}
이 테스트 케이스는 프로젝트 루트의 test라는 디렉터리 하위에 파일을 생성하여 작성해야만 테스트를 실행시킬 수 있으니 주의하세요. group이라는 것을 이용하여 테스트들을 하나의 그룹으로 묶을 수 있습니다.
상단의 run 혹은 flutter test [테스트 파일 경로] 명령어를 통해 테스트를 실행시켜볼 수 있습니다.