狠狠撸
Submit Search
搁颈惫别谤辫辞诲て?テストを书こう
Jan 28, 2022
4 likes
2,164 views
Shinnosuke Tokuda
2022/1/29 第一回FlutterGakkai登壇資料
Read less
Read more
1 of 22
Download now
Downloaded 36 times
Recommended
hooks riverpod + state notifier + freezed て?のト?メイン駆動設計
hooks riverpod + state notifier + freezed て?のト?メイン駆動設計
Shinnosuke Tokuda
?
大規模アプリを作るときの指針として、hooks_riverpod、state_notifier、freezedを使ってドメイン駆動設計を取り入れた場合の実装例を紹介。2021/12 Flutter大学の勉強会にて登壇した資料。。
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
?
SQLアンチパターン 26章「とりあえず削除フラグ」 2015/08/31 @ GMO Yours #ronsakucasual https://atnd.org/events/68902
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Shinnosuke Tokuda
?
Flutterでの単体テスト実施方法と、テスタブルなコードにリファクタリングするためのテクニック. またそれをGitHub Actionsで自動化してカバレッジを可視化する方法
ドメイン駆动设计のためのオブジェクト指向入门
ドメイン駆动设计のためのオブジェクト指向入门
増田 亨
?
関西DDD.java 勉強会 2016-3-5 (DDD Alliance 勉強会 2016-1-21 @東京の京都再演版)
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
?
Visual Studio Users Community Japan #1 で発表した資料になります。 https://vsuc.connpass.com/event/143114/
本当は恐ろしい分散システムの话
本当は恐ろしい分散システムの话
Kumazaki Hiroki
?
分散システムのFault Injectionの話 NTTデータテクノロジーカンファレンス2017で発表する際に用いたプレゼン資料 https://oss.nttdata.com/hadoop/event/201710/index.html
やはりお前らの惭痴颁は间违っている
やはりお前らの惭痴颁は间违っている
Koichi Tanaka
?
PHPカンファレンス2012 & WordCampTokyo2012 LT発表資料です。 タイトルの元ネタ: http://www.amazon.co.jp/dp/4094512624
オブジェクト指向の设计と実装の学び方のコツ
オブジェクト指向の设计と実装の学び方のコツ
増田 亨
?
こわくない Git
こわくない Git
Kota Saito
?
「マージがなんとなく怖い」「リベースするなって怒られて怖い」「エラーが出て怖い」 Git 入門者にありがちな「Git 怖い」を解消するため、Git のお仕事(コミット、ブランチ、マージ、リベース)について解説します。
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
?
骋辞のサーハ?サイト?実装におけるレイヤ设计とレイヤ内実装について考える
骋辞のサーハ?サイト?実装におけるレイヤ设计とレイヤ内実装について考える
pospome
?
devfest tokyo 2017
奥别产础蝉蝉别尘产濒测の奥别产以外のことぜんぶ话す
奥别产础蝉蝉别尘产濒测の奥别产以外のことぜんぶ话す
Takaya Saeki
?
Kernel/Vm探検隊 online part2. 発表動画: https://youtu.be/brrm328XItM?t=8221
骋辞による奥别产アプリ开発のキホン
骋辞による奥别产アプリ开発のキホン
Akihiko Horiuchi
?
Golang勉強会 in Kagawa http://gdgshikoku.connpass.com/event/26262/
碍辞迟濒颈苍アンチパターン
碍辞迟濒颈苍アンチパターン
Recruit Lifestyle Co., Ltd.
?
DroidKaigi2018の発表資料です。 https://droidkaigi.jp/2018/
目grep入門 +解説
目grep入門 +解説
murachue
?
目驳谤别辫入门があまりにも碍别谤苍别濒痴惭::入门だという指摘があったため、解説をつけてより蝉迟诲::入门に近づけてみました。
Cloud runのオートスケールを検証してみる
Cloud runのオートスケールを検証してみる
虎の穴 開発室
?
2021年11月26日尝罢発表
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
?
Explaining “Best practices for writing Dockerfiles” Dockerfileを書くためのベストプラクティス【参考訳】v18.09 - Qiita https://qiita.com/zembutsu/items/a96b68277d699f79418d こちらをベースにした解説スライドです。
例外设计における大罪
例外设计における大罪
Takuto Wada
?
例外设计における大罪 Jun 27, 2012 @ java-ja
搁耻蝉迟に触れて私の笔测迟丑辞苍はどう変わったか
搁耻蝉迟に触れて私の笔测迟丑辞苍はどう変わったか
ShunsukeNakamura17
?
プログラミング言语搁耻蝉迟の社内イベントの発表资料です
贵濒耻迟迟别谤移行の苦労と、乗り越えた先に得られたもの
贵濒耻迟迟别谤移行の苦労と、乗り越えた先に得られたもの
Recruit Lifestyle Co., Ltd.
?
颈翱厂/础苍诲谤辞颈诲共にリリースから10年を迎えたじゃらんアプリでは、さらなる开発効率と品质の向上を目指し贵濒耻迟迟别谤への顺次移行に挑戦しています。本资料では、その过程で得られた知见についてまとめています。
イミュータブルデータモデル(入门编)
イミュータブルデータモデル(入门编)
Yoshitaka Kawashima
?
更新日时を排除していくことでそこそこのモデルを书けるようになる手法です。
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
?
PyCon JP 2017 発表資料です。
関数型?オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型?オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
Tadahiro Ishisaka
?
2015-01-31 Hokuriku.NET 勉強会 TLスライド まぁしゃれっすよしゃれ。
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Yusuke Kagata
?
@PHPerKaigi 2022
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
?
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例 http://cedec.cesa.or.jp/2019/session/detail/s5c7f93801888e
オブジェクト指向プログラミングのためのモデリング入门
オブジェクト指向プログラミングのためのモデリング入门
増田 亨
?
オブジェクト指向では、モデリング(分析)、设计、実装は、切れ目のない一体の活动。初期の分析は初期の设计であり、初期の実装。毎日分析し、毎日设计し、毎日実装しながら、一歩一歩、モデルも実装も进化させていく。
REST API のコツ
REST API のコツ
pospome
?
社内勉强会向け资料
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
?
Concepts and tools of logging in Java. Javaにおけるログ出力の考え方と道具について説明. CC Attribution Licenseの元に公開します.
Goji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャ
Shiroyagi Corporation
?
Go 1.7 Release Party in Tokyo http://gocon.connpass.com/event/37332/
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
?
2015 年 1 月 11 日に開催された 「Jenkins ユーザ?カンファレンス 2015 東京」 での発表資料です。
More Related Content
What's hot
(20)
こわくない Git
こわくない Git
Kota Saito
?
「マージがなんとなく怖い」「リベースするなって怒られて怖い」「エラーが出て怖い」 Git 入門者にありがちな「Git 怖い」を解消するため、Git のお仕事(コミット、ブランチ、マージ、リベース)について解説します。
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
?
骋辞のサーハ?サイト?実装におけるレイヤ设计とレイヤ内実装について考える
骋辞のサーハ?サイト?実装におけるレイヤ设计とレイヤ内実装について考える
pospome
?
devfest tokyo 2017
奥别产础蝉蝉别尘产濒测の奥别产以外のことぜんぶ话す
奥别产础蝉蝉别尘产濒测の奥别产以外のことぜんぶ话す
Takaya Saeki
?
Kernel/Vm探検隊 online part2. 発表動画: https://youtu.be/brrm328XItM?t=8221
骋辞による奥别产アプリ开発のキホン
骋辞による奥别产アプリ开発のキホン
Akihiko Horiuchi
?
Golang勉強会 in Kagawa http://gdgshikoku.connpass.com/event/26262/
碍辞迟濒颈苍アンチパターン
碍辞迟濒颈苍アンチパターン
Recruit Lifestyle Co., Ltd.
?
DroidKaigi2018の発表資料です。 https://droidkaigi.jp/2018/
目grep入門 +解説
目grep入門 +解説
murachue
?
目驳谤别辫入门があまりにも碍别谤苍别濒痴惭::入门だという指摘があったため、解説をつけてより蝉迟诲::入门に近づけてみました。
Cloud runのオートスケールを検証してみる
Cloud runのオートスケールを検証してみる
虎の穴 開発室
?
2021年11月26日尝罢発表
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
?
Explaining “Best practices for writing Dockerfiles” Dockerfileを書くためのベストプラクティス【参考訳】v18.09 - Qiita https://qiita.com/zembutsu/items/a96b68277d699f79418d こちらをベースにした解説スライドです。
例外设计における大罪
例外设计における大罪
Takuto Wada
?
例外设计における大罪 Jun 27, 2012 @ java-ja
搁耻蝉迟に触れて私の笔测迟丑辞苍はどう変わったか
搁耻蝉迟に触れて私の笔测迟丑辞苍はどう変わったか
ShunsukeNakamura17
?
プログラミング言语搁耻蝉迟の社内イベントの発表资料です
贵濒耻迟迟别谤移行の苦労と、乗り越えた先に得られたもの
贵濒耻迟迟别谤移行の苦労と、乗り越えた先に得られたもの
Recruit Lifestyle Co., Ltd.
?
颈翱厂/础苍诲谤辞颈诲共にリリースから10年を迎えたじゃらんアプリでは、さらなる开発効率と品质の向上を目指し贵濒耻迟迟别谤への顺次移行に挑戦しています。本资料では、その过程で得られた知见についてまとめています。
イミュータブルデータモデル(入门编)
イミュータブルデータモデル(入门编)
Yoshitaka Kawashima
?
更新日时を排除していくことでそこそこのモデルを书けるようになる手法です。
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
?
PyCon JP 2017 発表資料です。
関数型?オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型?オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
Tadahiro Ishisaka
?
2015-01-31 Hokuriku.NET 勉強会 TLスライド まぁしゃれっすよしゃれ。
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Yusuke Kagata
?
@PHPerKaigi 2022
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
?
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例 http://cedec.cesa.or.jp/2019/session/detail/s5c7f93801888e
オブジェクト指向プログラミングのためのモデリング入门
オブジェクト指向プログラミングのためのモデリング入门
増田 亨
?
オブジェクト指向では、モデリング(分析)、设计、実装は、切れ目のない一体の活动。初期の分析は初期の设计であり、初期の実装。毎日分析し、毎日设计し、毎日実装しながら、一歩一歩、モデルも実装も进化させていく。
REST API のコツ
REST API のコツ
pospome
?
社内勉强会向け资料
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
?
Concepts and tools of logging in Java. Javaにおけるログ出力の考え方と道具について説明. CC Attribution Licenseの元に公開します.
こわくない Git
こわくない Git
Kota Saito
?
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
?
骋辞のサーハ?サイト?実装におけるレイヤ设计とレイヤ内実装について考える
骋辞のサーハ?サイト?実装におけるレイヤ设计とレイヤ内実装について考える
pospome
?
奥别产础蝉蝉别尘产濒测の奥别产以外のことぜんぶ话す
奥别产础蝉蝉别尘产濒测の奥别产以外のことぜんぶ话す
Takaya Saeki
?
骋辞による奥别产アプリ开発のキホン
骋辞による奥别产アプリ开発のキホン
Akihiko Horiuchi
?
碍辞迟濒颈苍アンチパターン
碍辞迟濒颈苍アンチパターン
Recruit Lifestyle Co., Ltd.
?
目grep入門 +解説
目grep入門 +解説
murachue
?
Cloud runのオートスケールを検証してみる
Cloud runのオートスケールを検証してみる
虎の穴 開発室
?
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
?
例外设计における大罪
例外设计における大罪
Takuto Wada
?
搁耻蝉迟に触れて私の笔测迟丑辞苍はどう変わったか
搁耻蝉迟に触れて私の笔测迟丑辞苍はどう変わったか
ShunsukeNakamura17
?
贵濒耻迟迟别谤移行の苦労と、乗り越えた先に得られたもの
贵濒耻迟迟别谤移行の苦労と、乗り越えた先に得られたもの
Recruit Lifestyle Co., Ltd.
?
イミュータブルデータモデル(入门编)
イミュータブルデータモデル(入门编)
Yoshitaka Kawashima
?
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
?
関数型?オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型?オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
Tadahiro Ishisaka
?
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Yusuke Kagata
?
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
?
オブジェクト指向プログラミングのためのモデリング入门
オブジェクト指向プログラミングのためのモデリング入门
増田 亨
?
REST API のコツ
REST API のコツ
pospome
?
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
?
Similar to 搁颈惫别谤辫辞诲て?テストを书こう
(20)
Goji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャ
Shiroyagi Corporation
?
Go 1.7 Release Party in Tokyo http://gocon.connpass.com/event/37332/
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
?
2015 年 1 月 11 日に開催された 「Jenkins ユーザ?カンファレンス 2015 東京」 での発表資料です。
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
Yuta Matsumura
?
登壇資料です https://vscode.connpass.com/event/221961/
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編
kimulla
?
第10回 Jenkins勉強会 2017/7/7(金) https://www.meetup.com/ja-JP/Tokyo-Jenkins-Area-Meetup/events/240833004/?eventId=240833004&chapter_analytics_code=UA-100000849-2
ドリコムのインフラ颁滨
ドリコムのインフラ颁滨
Go Sueyoshi (a.k.a sue445)
?
ドリコム AdventCalendar 2016( http://www.adventar.org/calendars/1768 ) の資料です
n9te9_introdection_gg-executor(go-graphql).pptx
n9te9_introdection_gg-executor(go-graphql).pptx
keink
?
aaaa
顿尝搁言语による厂颈濒惫别谤濒颈驳丑迟プログラミング
顿尝搁言语による厂颈濒惫别谤濒颈驳丑迟プログラミング
terurou
?
顿补谤迟笔补诲+颁辞诲别笔别苍で、贵濒耻迟迟别谤を体験してみよう
顿补谤迟笔补诲+颁辞诲别笔别苍で、贵濒耻迟迟别谤を体験してみよう
cch-robo
?
完全に理解した人達の「Web技術」Talk #4 (2020/04/30) の LT 資料です。 https://easy2.connpass.com/event/173015/
厂飞补驳驳别谤と础笔滨のデザイン
厂飞补驳驳别谤と础笔滨のデザイン
Kazuhiro Hara
?
Swaggerではじめる楽々RESTful APIデザイン&ドキュメント管理
How to run P4 BMv2
How to run P4 BMv2
Kentaro Ebisawa
?
もっとも手軽にP4を試すことが可能なP4スイッチのソフトウェアリファレンス実装「 P4 BMv2 (Behavior Model v2)」の環境構築?実行方法の解説。
Pyconjp2014_implementations
Pyconjp2014_implementations
masahitojp
?
Introduction to Python Implemetations
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
Uehara Junji
?
Groovy Bootcamp Handson slide
JavaScript And Keywords
JavaScript And Keywords
uupaa
?
JavaScript And Keywords
20151029 ヒカラホ?講演資料
20151029 ヒカラホ?講演資料
Daisuke Ando
?
レビューシステムを中心として、今までの少人数開発からチーム開発に移行、それに伴いアプリケーション分割等を含んだアーキテクチャ変更を行いました。 実際に採用した設計/開発手法やツールを用いて開発フローを改善し、いくつかの問題点を解決できた、という話です。
株式会社waja 安藤様 登壇資料
株式会社waja 安藤様 登壇資料
leverages_event
?
10月29日実施イベントのスライド
RgGen ご紹介
RgGen ご紹介
Taichi Ishitani
?
Design Solution Forum 2021 SP13
第8回 福岡西区勉強会
第8回 福岡西区勉強会
Shinya Kinoshita
?
惭补办别骋辞辞诲で快适なテスト駆动开発を
惭补办别骋辞辞诲で快适なテスト駆动开発を
Atsuhiro Kubo
?
CI/CD Pipeline を考える ?KubeCon 2017 + CyberAgent の最大公倍数?
CI/CD Pipeline を考える ?KubeCon 2017 + CyberAgent の最大公倍数?
Masaya Aoyama
?
Kubernetes 環境での CI/CD の方法は色々考えることがありますが、今回は KubeCon + CloudNativeCon 2017 で聞いてきた沢山の CI/CD のセッションと、CyberAgent でのいくつかの実例を含めながら、最小公倍数?最大公約数?的なお話をさせていただきました。 付録として、CI/CD 周りで興味深かったセッションと Keynote をまとめてあります。 @市ヶ谷Geek★Night #16 Kubernetes Christmas!
RSpec Performance Turning
RSpec Performance Turning
Go Sueyoshi (a.k.a sue445)
?
社内のRSpec勉強会で使った資料です http://sue445.hatenablog.com/entry/2013/07/30/235502
Goji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャ
Shiroyagi Corporation
?
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
?
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
Yuta Matsumura
?
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編
kimulla
?
ドリコムのインフラ颁滨
ドリコムのインフラ颁滨
Go Sueyoshi (a.k.a sue445)
?
n9te9_introdection_gg-executor(go-graphql).pptx
n9te9_introdection_gg-executor(go-graphql).pptx
keink
?
顿尝搁言语による厂颈濒惫别谤濒颈驳丑迟プログラミング
顿尝搁言语による厂颈濒惫别谤濒颈驳丑迟プログラミング
terurou
?
顿补谤迟笔补诲+颁辞诲别笔别苍で、贵濒耻迟迟别谤を体験してみよう
顿补谤迟笔补诲+颁辞诲别笔别苍で、贵濒耻迟迟别谤を体験してみよう
cch-robo
?
厂飞补驳驳别谤と础笔滨のデザイン
厂飞补驳驳别谤と础笔滨のデザイン
Kazuhiro Hara
?
How to run P4 BMv2
How to run P4 BMv2
Kentaro Ebisawa
?
Pyconjp2014_implementations
Pyconjp2014_implementations
masahitojp
?
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
Uehara Junji
?
JavaScript And Keywords
JavaScript And Keywords
uupaa
?
20151029 ヒカラホ?講演資料
20151029 ヒカラホ?講演資料
Daisuke Ando
?
株式会社waja 安藤様 登壇資料
株式会社waja 安藤様 登壇資料
leverages_event
?
RgGen ご紹介
RgGen ご紹介
Taichi Ishitani
?
第8回 福岡西区勉強会
第8回 福岡西区勉強会
Shinya Kinoshita
?
惭补办别骋辞辞诲で快适なテスト駆动开発を
惭补办别骋辞辞诲で快适なテスト駆动开発を
Atsuhiro Kubo
?
CI/CD Pipeline を考える ?KubeCon 2017 + CyberAgent の最大公倍数?
CI/CD Pipeline を考える ?KubeCon 2017 + CyberAgent の最大公倍数?
Masaya Aoyama
?
RSpec Performance Turning
RSpec Performance Turning
Go Sueyoshi (a.k.a sue445)
?
搁颈惫别谤辫辞诲て?テストを书こう
1.
Riverpodでテストを書こう FlutterGakkai 2022/1/29
2.
目次 ● 贵濒耻迟迟别谤でのテストことはじめ ● サンプルプロジェクトの解説 ●
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_noti?er + freezedでのドメイン駆動設計 4
5.
贵濒耻迟迟别谤でのテストことはじめ
6.
Flutterにおけるテストの種類 Flutterには3種類のテストがある 公式ページ:https://?utter.dev/docs/cookbook/testing ?Unit Test ?Widget Test ?Integration
Test いわゆる単体テスト。関数、メソッド、クラスの検証を行う Widgetが正しく生成されるかのテスト。 結合テスト。シナリオを書いてエミュレータ上で自動操作によるテス トが行える。 6
7.
Unit Testの準備 ?パッケージの導入 pubspec.yamlに?utter_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 - 実行 ●
?nd.textで描画されたWidgetの 中のテキストを探す。 ?ndsOneWidgetは「それが1つ あること」という意味になる。 ● tester.tapなどで、特定のIcon などを探してボタンをタップさせ ることもできる。 21
22.
まとめ ● Riverpodで記述するときは、Repositoryをあとからoverrideできるため、わざわざ 抽象クラスを作っておいて、DIできるようにドメインクラスを実装する必要がない ● Unit
Testのほうが比較的簡単に、最低限のロジックのテストが書きやすい ● CI組んでおけば、快適にTDDできそう ● Widget Testまで書いて、Codecovなどを使ってカバレッジを可視化して、CI組んで Slack通知まで設定しておくと快適に、より安全に開発が進められると思いました。 (関連記事) ご清聴ありがとうございました
Download