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.)