Flutter로 단위 테스트 작성
                                            
                                                
                                                
                                                
                                                
                                                
                                                 6685 단어  AndroidStudio테스트DartFlutter
                    
시도해 보았던 것을 공유합니다. 여기는 이렇게 하면 해결한다! 이런 편이 좋다! 라든지 있으면 코멘트 주시면 기쁩니다.
필자의 레벨
했던 일
이전에 작성한 TODOAppSample-Flutter로 단위 테스트를 수행했습니다.
 모든 코드는 여기
기본적으로는 아래의 공식 문서에 방법이 쓰여 있으므로 참조하십시오.
 An introduction to unit testing
 필요한 준비
pubspec.yaml에 다음과 같이 flutter_test를 추가해야 합니다.
 
또한 저는 다음과 같은 환경에서 실시했습니다.
OS:Windows 10 Pro 1909
IDE:Android Studio 4.1.1
 코드
테스트 코드이지만 프로젝트 루트의 test 폴더 아래에 테스트하려는 dart 파일의 이름에 _test가 붙은 파일을 만들어 그 안에 씁니다.
 
기본적인 단위 테스트는 간단하게 걸어 다음과 같이 됩니다.
test.dart
import 'package:flutter_test/flutter_test.dart';
import 'package:todo_app_sample_flutter/data/todo_item.dart';
void main() {
  group("TodoItemのゲッターのテスト", () {
    final TodoItem todoItem = TodoItem(
      id: 0,
      title: 'title',
      body: 'body',
      createdAt: DateTime(2020, 1, 1),
      updatedAt: DateTime(2020, 1, 1),
      isDone: true,
    );
    test('idのテスト', () {
      expect(todoItem.getId, 0);
    });
flutter_test.dart 및 테스트할 dart 파일을 가져옵니다.main()에 test() 함수를 쓰고 그 중 예상 값을 expect(<テスト対象が出力する値>,<期待される結果>)와 같이 씁니다.test()가 하나의 테스트 케이스에 해당하는 느낌입니다.
각 test()를 group()로 그룹화할 수도 있습니다.
 모든 테스트 코드는 여기
 테스트 실행
실행하려면 다음과 같이 테스트 파일을 마우스 오른쪽 버튼으로 클릭하고 실행⇒test in ~~~ 을 클릭합니다.
 
테스트가 흐르고 결과가 화면 하단에 표시됩니다.
녹색 체크 마크가 붙어 있으면 테스트에 pass하고 있다는 것이 됩니다.
 
테스트에 실패하면 에러와 함께 다음과 같이 출력됩니다.
 
위의 예에서는 예상 결과의 날짜를 일부 변경했습니다.Expected와 Actual가 다르다는 것을 보여줍니다.
 결론
이 기사를 위해 작성한 테스트는 매우 간단했습니다. 왜냐하면 TodoItem은 데이터를 저장하는 유일한 엔티티 역할만 있기 때문입니다.
그러나 다른 수업에 테스트를 쓰려고 하면 어쨌든 쓸 수 없다는 것을 알았습니다.
다른 클래스에 대해서도 테스트를 시도했지만 내가 작성한 코드에서는 테스트 할 수 없습니다.
todo_item_repository.dartclass TodoItemRepository {
  static String table = 'todo_item';
  static DatabaseProvider instance = DatabaseProvider.instance;
DB의 인스턴스를 내부에서 생성해 버리고 있기 때문에, mock로 옮겨놓을 수 없기 때문입니다.
이런 일을 일으키지 않기 위해서, 인스턴스의 생성시에 DB의 인스턴스를 밖으로부터 건네주면 좋을 것 같습니다.
개인 개발하고 있는 분에는 코어가 되는 비즈니스 로직만 의존관계에 주의하면서 코딩해 두고, 테스트하기 쉽도록 해 두는 것이 좋다고 생각했습니다.
그 중 테스터블한 코드로 다시 써 다시 기사로 하려고 합니다.
 2021/02/15 추가
기사로했습니다! 【Flutter】Provider로 최소한의 DI를 실시해 테스타블인 코드에 리팩토링한다
 2021/4/9 추가
이 기사에 관한 발표를 실시했습니다.
다음은 발표 슬라이드입니다.
 
테스트 코드이지만 프로젝트 루트의 test 폴더 아래에 테스트하려는 dart 파일의 이름에
_test가 붙은 파일을 만들어 그 안에 씁니다.
기본적인 단위 테스트는 간단하게 걸어 다음과 같이 됩니다.
test.dart
import 'package:flutter_test/flutter_test.dart';
import 'package:todo_app_sample_flutter/data/todo_item.dart';
void main() {
  group("TodoItemのゲッターのテスト", () {
    final TodoItem todoItem = TodoItem(
      id: 0,
      title: 'title',
      body: 'body',
      createdAt: DateTime(2020, 1, 1),
      updatedAt: DateTime(2020, 1, 1),
      isDone: true,
    );
    test('idのテスト', () {
      expect(todoItem.getId, 0);
    });
flutter_test.dart 및 테스트할 dart 파일을 가져옵니다.main()에 test() 함수를 쓰고 그 중 예상 값을 expect(<テスト対象が出力する値>,<期待される結果>)와 같이 씁니다.test()가 하나의 테스트 케이스에 해당하는 느낌입니다.각
test()를 group()로 그룹화할 수도 있습니다.모든 테스트 코드는 여기
테스트 실행
실행하려면 다음과 같이 테스트 파일을 마우스 오른쪽 버튼으로 클릭하고 실행⇒test in ~~~ 을 클릭합니다.
 
테스트가 흐르고 결과가 화면 하단에 표시됩니다.
녹색 체크 마크가 붙어 있으면 테스트에 pass하고 있다는 것이 됩니다.
 
테스트에 실패하면 에러와 함께 다음과 같이 출력됩니다.
 
위의 예에서는 예상 결과의 날짜를 일부 변경했습니다.Expected와 Actual가 다르다는 것을 보여줍니다.
 결론
이 기사를 위해 작성한 테스트는 매우 간단했습니다. 왜냐하면 TodoItem은 데이터를 저장하는 유일한 엔티티 역할만 있기 때문입니다.
그러나 다른 수업에 테스트를 쓰려고 하면 어쨌든 쓸 수 없다는 것을 알았습니다.
다른 클래스에 대해서도 테스트를 시도했지만 내가 작성한 코드에서는 테스트 할 수 없습니다.
todo_item_repository.dartclass TodoItemRepository {
  static String table = 'todo_item';
  static DatabaseProvider instance = DatabaseProvider.instance;
DB의 인스턴스를 내부에서 생성해 버리고 있기 때문에, mock로 옮겨놓을 수 없기 때문입니다.
이런 일을 일으키지 않기 위해서, 인스턴스의 생성시에 DB의 인스턴스를 밖으로부터 건네주면 좋을 것 같습니다.
개인 개발하고 있는 분에는 코어가 되는 비즈니스 로직만 의존관계에 주의하면서 코딩해 두고, 테스트하기 쉽도록 해 두는 것이 좋다고 생각했습니다.
그 중 테스터블한 코드로 다시 써 다시 기사로 하려고 합니다.
 2021/02/15 추가
기사로했습니다! 【Flutter】Provider로 최소한의 DI를 실시해 테스타블인 코드에 리팩토링한다
 2021/4/9 추가
이 기사에 관한 발표를 실시했습니다.
다음은 발표 슬라이드입니다.
 
이 기사를 위해 작성한 테스트는 매우 간단했습니다. 왜냐하면 TodoItem은 데이터를 저장하는 유일한 엔티티 역할만 있기 때문입니다.
그러나 다른 수업에 테스트를 쓰려고 하면 어쨌든 쓸 수 없다는 것을 알았습니다.
다른 클래스에 대해서도 테스트를 시도했지만 내가 작성한 코드에서는 테스트 할 수 없습니다.
todo_item_repository.dart
class TodoItemRepository {
  static String table = 'todo_item';
  static DatabaseProvider instance = DatabaseProvider.instance;
DB의 인스턴스를 내부에서 생성해 버리고 있기 때문에, mock로 옮겨놓을 수 없기 때문입니다.
이런 일을 일으키지 않기 위해서, 인스턴스의 생성시에 DB의 인스턴스를 밖으로부터 건네주면 좋을 것 같습니다.
개인 개발하고 있는 분에는 코어가 되는 비즈니스 로직만 의존관계에 주의하면서 코딩해 두고, 테스트하기 쉽도록 해 두는 것이 좋다고 생각했습니다.
그 중 테스터블한 코드로 다시 써 다시 기사로 하려고 합니다.
2021/02/15 추가
기사로했습니다! 【Flutter】Provider로 최소한의 DI를 실시해 테스타블인 코드에 리팩토링한다
2021/4/9 추가
이 기사에 관한 발표를 실시했습니다.
다음은 발표 슬라이드입니다.
Reference
이 문제에 관하여(Flutter로 단위 테스트 작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tokkun5552/items/ede8460bef4892f48e37텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)