Androidでのテストとカバレッジ測定メモ

先日、TkMixiViewer の某機能*1の実装時にTDDが必要になり、JUnit 環境を用意した。

テストプロジェクトを作ってテスト対象クラスの1メソッドに対してテストケースを作るだけ。

参考URL


そこでこの機会に全体的にテストケースを(いまさらながら)整備したくなった。
やみくもに作っても終わりが見えずモチベーションが保てないので、テストの指標値の1つである C0 カバレッジを計る環境を構築した。

最近の Android SDK には emma というカバレッジ測定用のライブラリ(かな?)が含まれているので環境構築自体は比較的簡単だと思う。

emma は djUnit のような Eclipse に統合された環境ではなくコマンドラインから実行するのが残念だけど、emulator で実行する都合などを考えると仕方ない気もする。

これまで Eclipse のみで開発してきたので ant 用設定ファイル(build.xml等)がないなど、いくつかめんどくさいポイントがあったけど、一度環境を整えてしまえばあとはバッチでも流すだけ。Jenkins さんも導入したほうがいいのかなー。Ubuntu に立てようかな。

生成された coverage.html はこんな感じ↓

これを 100% に近づけるべくテストケースを整備していこう。

# TkMixiViewerのパーサーなのに MZ3Parser.java だったりする


以下、メモ。

OSなど

主な手順

  • 対象プロジェクト本体(TkMixiViewer)およびライブラリプロジェクト(QuickActionLibなど)のbuild.xml生成
> cd TkMixiViewer
> android update project --path .
  • テストプロジェクト(TkMixiViewerTest)のbuild.xml生成
> cd TkMixiViewerTest
> android update test-project -m d:\Src\workspace\TkMixiViewer -p .
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_25
  • 対象プロジェクト本体のビルド、インストール
> cd TkMixiViewer
> ant emma debug install
  • emulator起動
  • テストプロジェクトのビルド、インストール、テスト
> cd TkMixiViewerTest
> ant emma debug install test
  • 上記手順で coverage/coverage.html が生成される。

うちの環境特有の問題・はまりポイント

  • ant がないので導入。
  • JDK がないので導入。
    • tools.jar がないと言われ。
    • Oracle のユーザ登録めんどくさい。
  • 文字コードSJISなので ant 失敗。全ソースコードUTF-8 に変換。
  • coverage.html が ISO-8859-1 なので UTF-8 に変更。
    • report.html.out.encoding がプロパティファイル等に書いても認識されないので ${android-sdk}\tools\ant\build.xml に記述。かっこわるい。
                 <emma>
+                    <property name="report.html.out.encoding" value="UTF-8" />

                     <report sourcepath="${tested.project.absolute.dir}/${source.dir}"

*1:mixi文字コードをimgタグに変換する部分。それなりの品質を担保できた。