Unit Test (단위 테스트)

ssh·2023년 12월 18일
0

dart

목록 보기
21/22

단위(Unit) 테스트

  • 특정 모듈이 의도한 대로 잘 작동하는가를 테스트하는 것이다.

테스트 케이스

  • 가능한 모든 가능성의 범위를 테스트하는 것이 좋은 테스트 케이스다.

장점

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

사용 경우

  • DB
    • 스키마가 변경되는 경우
    • 모델 클래스가 변경되는 경우
  • Network
    • 예측한 데이터가 제대로 들어오는지
  • 데이터 검증
    • 예측한 데이터를 제대로 처리하고 있는지

사용 방법

  • 테스트 코드는 원래 파일에 _test를 붙이고 동일 위치에 생성한다.
  • 테스트 기법
    • given > when > then
    • expect() 함수를 활용해 결과를 검증한다.

Mock 객체 활용

  • 때때로 단위 테스트는 라이브 웹 서비스 또는 데이터베이스에서 데이터를 가져오는 클래스에 의존할 수 있다. 이는 다음과 같은 몇 가지 이유로 불편하다.
    • 테스트 실행 속도가 느려진다.
    • 예기치 않은 결과를 반환하면 통과 테스트가 실패하기 시작할 수 있다.
    • 가능한 모든 성공 및 실패 시나리오를 테스트하는 것은 어렵습니다.
    • 따라서 라이브 웹 서비스나 데이터베이스에 의존하는 대신 이러한 종속성을 Mocking할 수 있다.
  • Mock은 라이브 웹 서비스 또는 데이터베이스를 에뮬레이션하고 상황에 따라 특정 결과를 반환할 수 있다.
  • 가짜 객체를 작성하여 테스트할 수 있다.
  • 먼저 데이터를 가져오는 객체의 interface를 정의한다.
  • 네트워크 통신 테스트를 위해 매번 실제로 통신을 한다면 비용+, 시간+, 불확실성+ (서버 에러 등)

예제

짝수일 경우 true를 반환하는 함수

import 'package:basic/23_12_18/even.dart';
import 'package:test/test.dart';

void main() {
  test('짝수일 경우 true를 반환', () => expect(isEven(4), true));
  test('홀수일 경우 false를 반환', () => expect(isEven(3), false));
}

숫자들 중 최대값을 반환하는 함수

import 'package:basic/23_12_18/maximum_value.dart';
import 'package:test/test.dart';

void main() {
  List<int> list1 = [2, 5, 1, 9, 3];
  List<int> list2 = [1, 10, 8, 7, 6];

  test('최대값을 반환', () => expect(findMax(list1), equals(9)));
  test('최대값을 반환', () => expect(findMax(list2), equals(10)));
  test('최대값을 반환', () => expect(findMax(list1), equals(11)));
}

문자열을 거꾸로 반환하는 함수

import 'package:basic/23_12_18/reverse_string.dart';
import 'package:test/test.dart';

void main() {
  String s1 = 'hello';
  String s2 = 'world';
  test('olleh를 반환한다', () => expect(reverseString(s1), equals('olleh')));
  test('dlrow를 반환한다', () => expect(reverseString(s2), equals('dlrow')));
  test('dlrow를 반환한다', () => expect(reverseString(s1), equals('dlrow')));
}

0개의 댓글

관련 채용 정보