[Dart] TDD

김동욱·2023년 12월 19일
0

테스트를 하는 방법들

=> 수동 테스트 : 인간이 하는 테스트

=> 단위 테스트 : 1개 클래스를 테스트

=> 통합 테스트 : 여러개 연관된 클래스를 함께 테스트

  • 화이트 박스 테스트

    • 내부 구조와 동작에 중점을 두고 테스트하는 방법
    • 코드의 내부 로직, 제어 흐름, 데이터 흐름 등을 이해하고 검증하는 데에 사용
    • 테스트 케이스를 설계할 때 코드의 특정 부분을 직접 확인
    • 주요 기법으로는 구문 검사, 경로 검사, 조건/분기 검사 등이 있다
  • 블랙박스 테스트

    • 소프트웨어의 내부 구조를 무시하고 기능을 테스트하는 방법
    • 시스템이 어떻게 동작하는지에 대한 내부 정보를 알 필요 없이 사용자 관점에서 테스트
    • 테스트 케이스는 입력 값과 예상 출력 값에 기반하여 설계
    • 요구 사항을 충족하는지 확인하고, 시스템의 기능적 및 비기능적 요구 사항을 테스트
    • 주요 기법으로는 등가 분할, 경계 값 분석, 상태 전이 테스트 등이 있다
  • 장점

    • 장애에 관한 신속한 피드백
    • 개발 주기에서 조기 장애 감지
    • 회귀에 신경 쓸 필요 없이 코드를 최적화할 수 있도록 하는 더 안전한 코드 리팩터링
    • 기술적 문제를 최소화하는 안정적인 개발 속도

TDD 의 단점

  • 시간과 비용:
    초기에 테스트 케이스를 작성하는 데 시간과 노력이 많이 필요할 수 있습니다.
    특히 작은 프로젝트나 변동이 많은 환경에서는 초기 투자 비용이 높아질 수 있습니다.

  • 학습 곡선:
    TDD를 처음 적용하는 개발자들에게는 학습 곡선이 존재합니다.
    TDD에 익숙해지기까지 일시적으로 생산성이 감소할 수 있습니다.

  • 전체 커버리지 보장의 어려움:
    모든 상황을 고려한 완벽한 테스트 커버리지를 확보하기는 어렵습니다.
    특히 복잡한 시스템에서는 모든 경우를 고려하는 것이 어려울 수 있습니다.

  • 테스트 유지 관리:
    코드의 변경에 따라 테스트도 변경되어야 합니다.
    테스트 코드의 유지보수가 제대로 이루어지지 않으면 테스트 코드가 불안정해질 수 있습니다.

위의 장담점을 고려시 TDD 를 반드시 도입할 필요는 없으나 경우에 따라 필요한 부분에 한해서 unit test 를 진행하는 것이 좋을 것 같음


Dart 에서 테스트 실행
1. test dependency 추가필요
flutter pub add dev:test
2. 테스트 파일 생성
my_app/
lib/
show.dart
test/
show_test.dart

테스트 파일은 테스트 폴더내에 작성하여 테스트

  1. 테스트 하기 위한 클래스 생성
class Dump{
	int value = 0;
    
    void addValue() => value++;
}
  1. 생성된 클래스의 테스트 코드 작성
void main(){
	test('show value add 1', (){
    	final dump = Dump();
        
        dump.addValue();
        
        expect(dump.value, 1);
    });
}
  1. 테스트 코드 실행
    vscode, IntelliJ 등 IDE 를 활용하여 테스트 코드 실행
  • vscode
  1. 테스트 코드가 작성된 파일 열람
  2. run > Start Debugging 실행
  • 실행결과 예시

    debug 콘솔에 결과가 출력되며 vscode 기준 좌측에 체크 표시로 테스트 통과 표시가 됨

ref)
1. "An introduction to unit testing | Flutter", 23.12.19, https://docs.flutter.dev/cookbook/testing/unit/introduction

profile
백엔드 개발자

0개의 댓글