2016/06/27

[android]カバレッジを取りたい

Android Studio 2.1.2 + Nexus5で、カバレッジを取りたい。
いまの環境(2016/06/27)で、なるべく手間を掛けず、LCOVみたいなカバレッジ結果が見たいのだ。

Local Unit Testsの場合は、Project Explorer...という名前じゃないかもしれないが、左側に出てくるツリーでTestクラス名を右クリックすると「with Coverage」というメニュー項目があるからわかった。

では、instrumented Unit Testsの場合は?


検索すると、jacocoというものを使う人と、使わない人がいる。
なんとなく、使わなくてもよくなっていそうなので、この人のを参考にした。

baroqueworksdevの日記: コードカバレッジを使って、視覚的/統計的にテスト状況を確認する

terminalからgradlewコマンドを実行せずとも、Android Studioの右上くらいにある「Gradle」をクリックするとツリーが出てきて、その中に「verification/createDebugCoverageReport」みたいなのがあるから、それをダブルクリックすると同じ効果があるようだ。

 

で、そもそもこれで何が実行されるのかがわかっていなかったけど、Instrumented Unit Tests側のフォルダ(androidTestと書いてある方)のテストが実行されるようだ。

ただ、実機側のログに「java.lang.ClassNotFoundException: org.jacoco.agent.~~」や「TestRunner: Failed to generate emma coverage. 」と出ているので、jacocoを明示的に指定しなくてもよくなっただけかも。

あと、テストがちゃんと動かせてないのかも。。。
でも、reportフォルダの中にはそれらしいものが生成されているから、まったくダメというわけでもないだろう。

 

この辺りが役立った。
BDS pluginの生成するソースでは、Handlerを使っているのだ。
AndroidのInstrumented Unit Testsを試す - mnatsu31’s blog

 

あと解決できてないのが、同じく生成されているServiceだ。
これが動いてくれないと、何もできないに等しいのだ。。。

でも、下回りを全部動かすテストって、もうUnit Testじゃないよねぇ。
そうそう、そもそもは、単にアプリを動かしたときのカバレッジがほしかっただけなのだ。

初心を忘れていましたね。


しかし、勝手にカバレッジを取ってくれるような方法は見つけられてない。
gccで-coverageを付けてビルドしたアプリを動かしたときのようなやつだ。

正常系はボタンとか操作して動かすことでカバレッジを取っておいて、それで動いていない箇所だけLocal Unit Testsでやろうか、と思っていたのだ。

 

JavaやAndroidだから、そういうのもできるのかも、と思ったけど、やり方がわからんだけか。。。
なんか「最新の科学で解決しました」みたいなイメージでいるから、よくわからないけどやってくれそうな気がしたのだよ。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。