Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Shinnosuke Tokuda
PDF, PPTX
2,234 views
Riverpodでテストを書こう
2022/1/29 第一回FlutterGakkai登壇資料
Engineering
◦
Related topics:
Software Testing Insights
•
Read more
4
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 22
2
/ 22
3
/ 22
4
/ 22
5
/ 22
6
/ 22
7
/ 22
8
/ 22
9
/ 22
10
/ 22
11
/ 22
12
/ 22
13
/ 22
14
/ 22
15
/ 22
16
/ 22
17
/ 22
18
/ 22
19
/ 22
20
/ 22
21
/ 22
22
/ 22
More Related Content
PDF
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
by
Shinnosuke Tokuda
PDF
Flutter移行の苦労と、乗り越えた先に得られたもの
by
Recruit Lifestyle Co., Ltd.
PDF
go_router が隠してくれるもの
by
cch-robo
PDF
Form認証で学ぶSpring Security入門
by
Ryosuke Uchitate
PDF
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
PDF
アプリ屋もDockerをドカドカ使おう ~ Docker入門
by
Hori Tasuku
PDF
3週連続DDDその3 ドメイン駆動設計 戦略的設計
by
増田 亨
PDF
マイクロにしすぎた結果がこれだよ!
by
mosa siru
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
by
Shinnosuke Tokuda
Flutter移行の苦労と、乗り越えた先に得られたもの
by
Recruit Lifestyle Co., Ltd.
go_router が隠してくれるもの
by
cch-robo
Form認証で学ぶSpring Security入門
by
Ryosuke Uchitate
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
アプリ屋もDockerをドカドカ使おう ~ Docker入門
by
Hori Tasuku
3週連続DDDその3 ドメイン駆動設計 戦略的設計
by
増田 亨
マイクロにしすぎた結果がこれだよ!
by
mosa siru
What's hot
PDF
hooks riverpod + state notifier + freezed でのドメイン駆動設計
by
Shinnosuke Tokuda
PDF
怖くないSpring Bootのオートコンフィグレーション
by
土岐 孝平
PDF
こんなに使える!今どきのAPIドキュメンテーションツール
by
dcubeio
PDF
フロー効率性とリソース効率性について #xpjug
by
Itsuki Kuroda
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
by
NTT DATA Technology & Innovation
PDF
ドメインオブジェクトの見つけ方・作り方・育て方
by
増田 亨
PDF
Python におけるドメイン駆動設計(戦術面)の勘どころ
by
Junya Hayashi
PPTX
JIRA / Confluence の必須プラグインはこれだ
by
Narichika Kajihara
PDF
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
by
Shin Ohno
PDF
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
by
Go Maeda
PDF
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
by
Unity Technologies Japan K.K.
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
by
Koichiro Matsuoka
PDF
それはYAGNIか? それとも思考停止か?
by
Yoshitaka Kawashima
PDF
Redmineの開発状況のこれまでと現在
by
Go Maeda
PDF
イミュータブルデータモデル(入門編)
by
Yoshitaka Kawashima
PDF
世界でいちばんわかりやすいドメイン駆動設計
by
増田 亨
PDF
View Customize Pluginで出来ること
by
onozaty
PDF
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
PPTX
UniRxでMV(R)Pパターンをやってみた
by
torisoup
PPTX
講演1 Redmine導入のアンチパターン
by
Hidehisa Matsutani
hooks riverpod + state notifier + freezed でのドメイン駆動設計
by
Shinnosuke Tokuda
怖くないSpring Bootのオートコンフィグレーション
by
土岐 孝平
こんなに使える!今どきのAPIドキュメンテーションツール
by
dcubeio
フロー効率性とリソース効率性について #xpjug
by
Itsuki Kuroda
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
by
NTT DATA Technology & Innovation
ドメインオブジェクトの見つけ方・作り方・育て方
by
増田 亨
Python におけるドメイン駆動設計(戦術面)の勘どころ
by
Junya Hayashi
JIRA / Confluence の必須プラグインはこれだ
by
Narichika Kajihara
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
by
Shin Ohno
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
by
Go Maeda
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
by
Unity Technologies Japan K.K.
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
by
Koichiro Matsuoka
それはYAGNIか? それとも思考停止か?
by
Yoshitaka Kawashima
Redmineの開発状況のこれまでと現在
by
Go Maeda
イミュータブルデータモデル(入門編)
by
Yoshitaka Kawashima
世界でいちばんわかりやすいドメイン駆動設計
by
増田 亨
View Customize Pluginで出来ること
by
onozaty
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
UniRxでMV(R)Pパターンをやってみた
by
torisoup
講演1 Redmine導入のアンチパターン
by
Hidehisa Matsutani
Riverpodでテストを書こう
1.
Riverpodでテストを書こう FlutterGakkai 2022/1/29
2.
目次 ● Flutterでのテストことはじめ ● サンプルプロジェクトの解説 ●
Unit Test ● Widget Test ● まとめ 2
3.
自己紹介 とっく(@tokkuu) ● 都内AdTech企業のWebエンジニア ● php/python/TypeScript ●
AWS周り 3-tierからサーバレスまで ● 元々はSIerのインフラエンジニア ● Flutter歴は1年半くらい 3
4.
はじめに ● 説明すること ○ Riverpodでのユニットテストの書き方 ○
RiverpodでのWidgetテストの書き方 ● 説明しないこと ○ DIを用いたProviderでのテストの書き方 ○ Integration Testについて ○ CIへの組み込みやDDDについて ● Providerでのテストについて ○ Flutterで単体テストを行う方法とGitHub Actionsを使った自動化 ● DDDの説明(同じサンプルを使用) ○ hooks_riverpod + state_notifier + freezedでのドメイン駆動設計 4
5.
Flutterでのテストことはじめ
6.
Flutterにおけるテストの種類 Flutterには3種類のテストがある 公式ページ:https://flutter.dev/docs/cookbook/testing ・Unit Test ・Widget Test ・Integration
Test いわゆる単体テスト。関数、メソッド、クラスの検証を行う Widgetが正しく生成されるかのテスト。 結合テスト。シナリオを書いてエミュレータ上で自動操作によるテス トが行える。 6
7.
Unit Testの準備 ・パッケージの導入 pubspec.yamlにflutter_testが追加されていること 7
8.
Unitテストの書き方と実行方法 プロジェクトルートの testフォルダの下に XXX_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); }); 8
9.
Unitテストの書き方と実行方法 プロジェクトルートの testフォルダの下に XXX_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); }); main関数の中に 実際のテストを記載 test(‘テストケース名’,(){ 実際のテスト処理 expect(結果,期待する値); }); group()でテストケースを まとめることが出来る。 9
10.
テスト実行 1. テストファイルを右クリック 2. Run
‘test in <テストファイル>’ デバッグの画面が開いて 結果が表示される 10
11.
サンプルプロジェクトの解説
12.
サンプルプロジェクトの説明 ● DDDぽく書いている ● application層の todo_app_service.dartがdomain層の classを使う形 ●
ビジネスロジックのテストという文脈で は、todo_app_service.dartを テストすれば十分 ● このプロジェクト自体の解説は Qiitaの記事参照 ● 全体のコードはこちら 12
13.
サンプルプロジェクトの説明 - TodoAppService ●
todo_app_serviceは todoListRepositoryに依存して いる ● todoListRepositoryはFirebase との通信を担う ● DDDじゃない場合、MVVM + Repositoryのパターンなどで は、View Modelでテストすれば 良い 13
14.
テストの準備 - TodoListRepositoryのモックを作る ●
TodoListRepositoryを実装した TodoListRepositoryMemを作 る ● TodoListRepositoryMemでは Firebaseとの通信を行わず、テ スト用に一時的にデータを貯め れるように実装しておく ● コード 14
15.
テストの準備 - ProviderContainerでoverrideする ●
Riverpodでは ProviderContainerを使ってモッ ク用のクラスを宣言することで、 Providerを上書きできる。 ● 右のように TodoListRepositoryMemを 宣言しておくことで このコンテナから呼び出したリ ポジトリやサービスでは 上書きされたモック用クラスが 呼び出される様になる。 15
16.
Unit Test
17.
Unit Test -
宣言 ● Widgetの生成が絡まない ロジックをテストする ● setUpやtearDownが使える ので、先程のコンテナの宣言や データのセットが行える。 ● Null Safetyなバージョンの Flutterであれば、コンテナや モックはlateで宣言しておくこと でnon-nullableに扱える 17
18.
Unit Test -
実行 1. 空のTodoItemを_repositoryに セットし、自動生成され 割り当てられたnextIdを取得 2. テスト対象のクラスを インスタンス化 3. テスト対象のメソッドを 実行し結果を expectメソッドで比較 2. 3. 1. 18
19.
Widget Test
20.
WidgetTest - 宣言 ●
モック用クラスは引き続き containerから取得 ● Widgetを生成するために、 tester.pumpWidgetの中で ProviderScopeを宣言し、モック にoverride ● childの中でテスト対象Widget の描画に必要なWidget、 MaterialAppなどを宣言した上 で対象のWidgetを宣言 20
21.
WidgetTest - 実行 ●
find.textで描画されたWidgetの 中のテキストを探す。 findsOneWidgetは「それが1つ あること」という意味になる。 ● tester.tapなどで、特定のIcon などを探してボタンをタップさせ ることもできる。 21
22.
まとめ ● Riverpodで記述するときは、Repositoryをあとからoverrideできるため、わざわざ 抽象クラスを作っておいて、DIできるようにドメインクラスを実装する必要がない ● Unit
Testのほうが比較的簡単に、最低限のロジックのテストが書きやすい ● CI組んでおけば、快適にTDDできそう ● Widget Testまで書いて、Codecovなどを使ってカバレッジを可視化して、CI組んで Slack通知まで設定しておくと快適に、より安全に開発が進められると思いました。 (関連記事) ご清聴ありがとうございました
Download