Dart:
테스트 코딩하기

방법:

Dart에서는 test 패키지를 일반적으로 테스트 작성에 사용합니다. 먼저 pubspec.yamltest 패키지를 추가합니다:

dev_dependencies:
  test: ^1.0.0

그 다음, 간단한 함수에 대한 테스트를 작성합니다. 두 숫자를 더하는 함수가 있다고 가정해 보겠습니다:

int add(int a, int b) {
  return a + b;
}

다음으로, test 디렉토리에 add_test.dart라는 파일을 생성하고 테스트 케이스를 작성합니다:

import 'package:test/test.dart';
import '../lib/add.dart'; // `add` 함수가 lib/add.dart에 있다고 가정합니다

void main() {
  test('두 숫자를 더함', () {
    var expected = 3;
    expect(add(1, 2), equals(expected));
  });
}

테스트를 실행하려면 Dart 명령어를 사용합니다:

$ dart test

샘플 출력은 다음과 같습니다:

00:01 +1: 모든 테스트 통과!

서드파티 라이브러리 사용하기: 모킹을 위한 Mockito

복잡한 의존성을 가진 코드를 테스트할 때는 Mockito를 사용하여 모의 객체를 생성할 수 있습니다. 먼저 pubspec.yaml에 Mockito를 추가합니다:

dev_dependencies:
  mockito: ^5.0.0

사용자 데이터를 가져오는 UserRepository 클래스가 있고 실제 데이터베이스에 접근하지 않고 UserRepository에 의존하는 UserService를 테스트하려고 한다고 가정합니다:

import 'package:mockito/mockito.dart';
import 'package:test/test.dart';
import 'package:your_project/user_repository.dart';
import 'package:your_project/user_service.dart';

// Mockito를 사용하여 Mock 클래스 생성
class MockUserRepository extends Mock implements UserRepository {}

void main() {
  group('UserService 테스트', () {
    test('사용자를 성공적으로 가져옴', () {
      // 모의 인스턴스 생성
      final mockUserRepository = MockUserRepository();
      final userService = UserService(mockUserRepository);

      // 모의 행동 설정
      when(mockUserRepository.fetchUser(1)).thenReturn(User(id: 1, name: '테스트 사용자'));

      // 모의 메소드가 예상된 인자로 호출되었는지 단언
      expect(userService.getUserName(1), '테스트 사용자');
      verify(mockUserRepository.fetchUser(1)).called(1);
    });
  });
}

이 테스트를 실행하면 UserServiceUserRepository와 올바르게 상호 작용하며, 모킹을 사용하여 실제 상호 작용을 제어된 방식으로 시뮬레이션하는 것을 확인할 수 있습니다.