概要
どうも、@daiki1003です!お久しぶりのブログになってしまいました。
さて、10/23 (土)に「DevFest Kyoto 2021 Flutterテスト講座」に登壇しました。
発表内容スライドはこちらです。
気付いたら3,700人もの方に見ていただいて本当にありがとうございます!!
本記事では、
・発表と同等の内容を軽くまとめ
・登壇のメリットなど
の2つについて書いていきたいと思います。
・テスト書いてるのは良いけど、可読性低いんだよなぁ…
・登壇を考えてるんだけどコスパ悪すぎでは…
なんて人に最適な記事になってると思います!
それでは行きましょー!
テストの可読性を支える技術
本発表では、1つの概念と3つのパッケージを説明しました。
・group
・given_when_then
・flutter_test_ui
・dart_dot_reporter
簡単に一つずつ説明したいと思います。
詳しくは、各パッケージページやスライドをどうぞ!
group
テストをグループ化出来ます。
また、 VSCodeであれば結果もグループによってまとまって出力されたりもします。
個人的には、この group
で RSpecの様にdescribe
, context
, it
なんかを表現するのも良いなーと思っています。
group('#Increment Button', () { // describe group('displaying "0"', () { // context test('displays "1", () { // it // test codes... }); }); });
given_when_then
テストの前提条件(given
)、テスト対象の処理(when
)、期待する結果(then
)を
ラップするパッケージです。
作る人が作れば、テストコードが英語を読むかの様に理解することができます。
test('displays "1", harness(given, when, then) async { await given.pumpMyWidget(); given.canFineZero(); given.cannotFindOne(); await when.userTapsIncrementButton(); then.cannotFindZero(); then.canFindOne(); });
ただ、ちょっとラップするクラスを作るのが大変だったりするので
test('displays "1", (tester) async { // given await tester.pumpWidget(const MyApp()); expect(find.text('0'), findsOneWidget); expect(find.text('0'), findsNothing); // when await tester.tap(find.byKey(incrementKey)); tester.pump(); // then expect(find.text('0'), findsNothing); expect(find.text('1'), findsOneWidget); });
くらいで良い気はしています。
flutter_test_ui
setup
, tearDown
などのウィジェットテスト版です。setupUI
, tearDownUI
, testUI
などを提供してくれています。
void main() { setupUI((tester) async { await tester.pump(const MyApp()); } testUI('displays "1"', (tester) async { // test code }); }
setup
ではWidgetTester
インスタンスがないので重宝するかもしれません。
dart_dot_reporter
こちらはテスト結果の可読性を上げてくれるパッケージです。
ご存知の方も多いかもしれません。
登壇のメリットなど
実は、本記事で一番伝えたいのはこのパートだったりします。
みなさんは普段登壇はされてますか?
個人的には登壇することは強くお勧めします。
理由は以下。
・アウトプットに強制的なタイムリミットを設けられる
・インプットをする際に人に伝えるつもりでインプット出来る
・カラーバス効果
それぞれ軽く説明します。
アウトプットに強制的なタイムリミットを設けられる
xx月xx日にアウトプットをしなければいけない。
必要とあらば、その前にインプットをしなければいけない。
この強制力を自分に働かせられることが僕にとっては一番大きいです。
いろんな誘惑から逃れ、価値のあるアウトプットをするって人間には難しいです。
少なくとも僕にはかなり笑
僕のブログの更新間隔とか見ていただけると分かると思うのですが、
やはり何もないと気が向いた時になってしまい相当間隔が空いてしまいます。
また、締め切りが近づいてきた時ののインプット効率はすごいものがあるなぁと思ってます。
テスト前日にオールして勉強する時の感じですね笑
ただ、何を話すか全然決まらない時は本当に逃げたくなりますしその期間は
本当ストレスがやばいですw
インプットをする際に人に伝えるつもりでインプット出来る
インプットした時に、一番大事なのは「自分の言葉にすること」だと思ってます。
本を読んでも頭に入らないのは納得はしていても自分の言葉になっていないから。
登壇するには、インプットした内容を実践し自分の言葉にするしかありません。
カラーバス効果
この内容について、登壇しようと思うと不思議とそう言った内容の
Mediumの記事であったり、Youtubeのサジェストがすごく目に入ってきます。
短期的に自分の力を伸ばすにはうってつけだなーなんて思っています。
誰かのお役に立てば。Twitterフォローお願いします
「次回以降も記事を読んでみたい!」「この辺分からなかったから質問したい!」
そんな時は、是非Twitter (@daiki1003)やInstagram (@ashdik_flutter)のフォローお願いします♪
Twitterコミュニティ参加お願いします
Twitterコミュニティ「Flutter lovers」を開設しました!参加お待ちしております😁
☕️ Buy me a coffee
また、記事がとても役に立ったと思う人はコーヒーを奢っていただけると非常に嬉しいです!
コメント