1. Unit Test?
Unit Test(단위 테스트)는 소프트웨어 개발에서 사용되는 테스트 방법 중 하나입니다. UnitTest는 코드의 작은 단위인 모듈, 함수, 클래스 등 의 개별적인 단위를 격리하여 테스트하는 것을 의미합니다.
2. Unit Test 장점
- 코드의 신뢰성 향상
코드의 각 부분을 개별적으로 테스트하므로 오류를 발견하고 수정할 수 있습니다. - 리팩토링 지원
코드를 수정하거나 개선할 때, Unit Test는 기존 기능을 올바르게 유지하면서 변경 사항을 검증할 수 있습니다. - 문서화
테스트 케이스는 코드의 사용법과 예상 동작에 대한 문서 역할을 할 수 있습니다. - 개발자 간의 협업
테스트 케이스는 동작을 명확하게 정의하므로, 여러 개발자들이 동일한 기준으로 작업할 수 있습니다.
3. Unit Test 해보기
이번 테스트는 Flutter 공식 예제에 나오는 테스트로 진행하겠습니다.
https://docs.flutter.dev/cookbook/testing/unit/introduction
1) 종속성 추가
첫 번째로 종속성을 추가해야 하지만 프로젝트를 처음생성 시에 자동으로 flutter_test 종속성이 추가됩니다. 여기서 눈여겨볼 것은 flutter_test는 dev_dependencies에 추가한 것입니다. 패키지의 종속성을 추가할 때 dependencies에 추가하곤 했습니다. 하지만 테스트는 개발자들이 본인의 프로젝트를 테스트해 보려고 사용하는 것이기 때문에 개발 시에 사용됩니다. 그래서 dev_dependencies에 추가하는 것입니다.
2) 파일 생성
테스트를 진행하기 위해 필요한 파일들을 생성합니다. Unit Test는 클래스, 함수 단위의 작은 테스트이기 때문에 counter 파일과 counter_test 파일을 만들어 줍니다. 테스트 파일은 test폴더 하위에 존재해야 합니다. test폴더는 프로젝트 생성 시에 자동으로 생깁니다. 주의할 것 은 테스트 파일의 이름은 항상 _test로 끝나야 한다는 것입니다.
3) 테스트 클래스 생성
class Counter {
int value = 0;
void increment() => value++;
void decrement() => value--;
}
counter.dart 파일에 해당 코드를 작성합니다. 0인 value가 함수에 의해 증가되거나 감소되는 간단한 코드입니다.
4) 테스트 코드 작성
import 'package:flutter_test/flutter_test.dart';
import 'package:unit_test/counter.dart';
void main() {
test("카운터 객체의 시작값이 0인가?", () {
final counter = Counter();
expect(counter.value, 0);
});
}
counter_test.dart 파일에 테스트 코드를 작성합니다. 여기서 중요한 것은 test함수와 expect함수입니다.
- test 함수
test 함수는 무엇을 테스트할지 정해주는 함수입니다. 첫 파라미터로 무엇에 대한 테스트인지 설명을 받고 두 번째 파라미터로는 해당 테스트의 Function을 받습니다.
- expect 함수
첫 파라미터로 실제 값을 받고 두 번째 파라미터로 테스트 결과로 나와야 하는 값을 넣어서 사용합니다.
Counter 클래스를 보면 생성 시에 value는 0으로 초기화됩니다. 그래서 Counter 객체를 생성하고 바로 counter의 value 값을 실제 값인 첫 번째 파라미터로 넣고 나와야 되는 값인 0을 두 번째 파라미터로 받았습니다.
5) 테스트 코드 실행
해당 프로젝트 터미널에 flutter test "테스트파일경로"를 실행하면 해당 테스트 파일에 등록된 테스트를 자동으로 해줍니다. counter 객체를 생성하고 그 값이 0 인지 테스트 했기에 모든 테스트를 통과했다고 나옵니다.
void main() {
test("카운터 객체의 시작값이 0인가?", () {
final counter = Counter();
expect(counter.value, 1);
});
}
만약에 expect에 예상 값을 1로 설정하고 테스트를 하면 어떻게 될까요?
이렇게 바로 해당 테스트에 에러를 출력해 줍니다.
6. 여러 테스트를 한 번에 하기
void main() {
group('Counter', () {
test('시작값이 0 인가?', () {
expect(Counter().value, 0);
});
test('증가가 되는가?', () {
final counter = Counter();
counter.increment();
expect(counter.value, 1);
});
test('감소가 되는가?', () {
final counter = Counter();
counter.decrement();
expect(counter.value, -1);
});
});
}
여러 테스트를 진행하고 싶다면 group으로 묶어서 사용하면 됩니다. 사용 방법은 test와 다르지 않습니다.
'Flutter > 기본' 카테고리의 다른 글
[Flutter] 애니메이션 처리를 위한 lottie 패키지 설명서 (0) | 2023.07.10 |
---|---|
[Flutter] IconButton 간격 줄이기 feat.패딩,마진제거 (0) | 2023.06.30 |
[Flutter] 텍스트 폰트 설정하기 (Pretendard폰트) (0) | 2023.06.23 |
[Flutter] 상태 표시줄 또는 스테이터스 바 설정하기 (0) | 2023.06.22 |
[Flutter] 람다함수없이 코드를 짜는 방법 feat. Tear-offs (0) | 2023.06.15 |