『Androidテスト全書』を執筆中の id:kikuchy です。
執筆の近況報告として、Android Test Night #4 にて執筆陣のトークに参加させていただきました。
testnight.connpass.com
ファシリテーターを務めてくださったながのさんからの質問と、それに対する私の答えはだいたい以下の通りでした。
当日の参加者のみなさまのツイートと合わせてお届けします。
Q1 どんな感じになりそうですか?
JUnit 5の章を担当しています。
後述しますが苦労しているところがあるので、このままでは「JUnit 5にはこんな便利な機能があるけれどAndroidでは使えないよ」という内容になりそうですこし苦しいです。
思い描いたことを書き出すのは良いのですが、それが本当にそうだったか、自分の理解や記憶が正しいか、の裏取りですごく時間がかかっています。
JUnit 5や、それを使えるようにするGradleプラグインのソースまで見に行ったりしています。
公式のユーザーマニュアルには載っていない機能が隠れたりしていて、そういうのを見つけると楽しいです。
Q2 進捗どうですか?苦労しているところは?
文章は書きたいことの6-7割が書けている段階です。
このままいけば多分なんとか締切には間に合うんじゃないかと…
苦労は多く、先程の通り、Android実機ではJUnit 5が動作してくれないのが一番つらいです。
AndroidではAndroidのランタイムでJavaのコードを動かすために、Java8の言語機能を使用したclassファイルにdesuagrというプロセスを通してJava7相当のclassファイルを生成し、それをdexに変換しています。
JUnit 5はどうやらJava9の機能を使っているらしくdesugarでコケるためInstrumented Testで使用できないようです…
JUnit5のこの機能がAndroidでは使えませんという内容(つらい…#android_test_night
— おれたま (@AHA_oretama) 2018年6月21日
また、紹介しているGradleプラグインのandroid-junit5にバグがあって、JUnit 5の新機能であるTagを使った実行するテストケースの制御がうまく行かず、修正を依頼するissueを立てたりしていました。
本を書くと本家が直っていくって世界平和すぎるのでは👏👏👏#android_test_night
— Takako (@ktkt_fire) 2018年6月21日
Q3 会場の方からのご質問(のうちkikuchyがお答えしたもの)
UIテストをすばやくうまく行かせるにはどうしたらよいか
無理に自動化しないほうが良いかなと…
ほかの登壇者の方々がおっしゃっていた通り、当然画面が変わると改修が必要になりますからメンテナンスコストが高いですし、実装が大変なので。
UIテストでの「期待通りに動作している」というアサーションには暗黙的に「この部分の色が指定どおりであること」「文字が見切れていないこと」などコードに落とすときに面倒くさかったり曖昧だったりすることが求められたりしていてコードに落とすのも大変です。
が、人間はそうしたファジーなものも受理できてかつ適格であるという判断までできてしまうので、アルバイトなど雇ってテストを頑張ってもらう、というのは十分ありだと思いますし、自動テストを整備するのにエンジニアのコストを掛けるより安く上がることもあると思います。
人間はfuzzyに対応できるからUIテストをメンテするよりも合理的 #android_test_night
— konyavic (@konyavic) 2018年6月21日
著者陣の受け答え総まとめは id:t-miliya612 さんのまとめブログを御覧ください!
奇しくもこの日は弊社のPodcastを始動した日でもありました。
こちらについても会場で前向きな感想をいただけてすごく嬉しかったです!
今日公開したDiverse Podcastについて、Test Nightでも「面白い試み」「弊社でもやってみたいと話をしていたところ」というコメントをいただきまして、本当にありがたい限りでした…!! エンジニアが疲れないペースで更新していきますので今後ともよろしくです https://t.co/r3333ev9jh #diverse_inc
— 菊池紘 (@kikuchy) 2018年6月21日
今後もスピーカーを増やしながら、弊社Diverse(ダイバース)の内情をお伝えしていきたいと思います。
ぜひお聞きください&ご購読ください!✧\\ ٩( 'ω' )و //✧
弊社に興味を持ってくださった方は @kikuchy または他の弊社エンジニアへ、お気軽にDMやリプライをください!
まずはご一緒にご飯を食べにいきましょう!!