Androidのユニットテスト
最近、Androidをやることになったわけで、いままでほぼ触ったことの無い
Javaさんに触れる機会を貰いました。
プログラムとしてはそんなに難しいとは思わないのだけど、パッケージだったり
インポートだったり、Jarだったり、そんなところで色々悩まされています。
で本題ですが
作るからには、ユニットテストをやるってことで色々調べ始めました。
まずビックリしたのがEclipse経由でユニットテストをするのに、なぜかActivityが必要っていう。
そもそもユニットテストするのに、なぜActivityに縛られるのか疑問だけど
そういうもんだと理解することにしました(調べた限り、そういうのしか出てこない・・・)
悔しがってもしょうがないので、テストを実行するところまで。
あと、別にActivityのテストしたいワケじゃないので、Activityに縛られない
Junitを使ったテストについてまとめておこう。
ユニットテスト環境の作り方
Targetのアプリケーションを作る
あまり気にせず、Target用のアプリケーションを作ります。
Activity自体にあんまり意味はなくて、とりあえずモジュールのユニットテストしたいだけなので。
上部メニューから「ファイル」→「新規作成」→「その他」を選んで
「Android アプリケーション・プロジェクト」を選んで
さっくさっくと、Activityを作ります。
出来上がったActivityのサンプルをエミュレータあたりで実行して
なんか立ち上がればOK
実行ボタン押して、「Androidアプリケーション」
こんなかんじで、立ち上がるよ。
テスト用のアプリを作る
ここからが本番。
前項で作ったアプリケーションに対してテストを作成するよ。
さっきと同じ感じで
上部メニューから「ファイル」→「新規作成」→「その他」を選んで
「Android テスト・プロジェクト」を選ぶよ。
テストプロジェクトの名前は適当で。
対象のアプリケーションにさっき作ったActivityを選択します。
で、ここまで出来ると、ほぼテスト環境が完成という。
実際にテストを書いてみる
実際、TargetActivityに書いてあるimportが可能なクラスなら、何でもテスト可能です。
なんでかというと、Testアプリのビルドパスに、TargetActivityが指定されてるから。
試しに、テストを書いてみます。
まず、TargetTestを右クリックして、「新規」→「Junitテストケース」を選択
テストクラスを作ります。
こんなかんじのコードを。
package com.riskrisk.test; import junit.framework.TestCase; import com.riskrisk.Calc; public class TargetTest extends TestCase { public void testPlus() { Calc calc = new Calc(); assertEquals(3, calc.plus(1,2)); } }
当然テストしかないから、Calcクラスを作るんで
TargetActivityに、Calcクラスを。
package com.riskrisk; public class Calc { public int plus(int a, int b) { return 0; } }
こんな感じ。
出来上がったら、TargetTest側で、「Android JUnit Test」を実行してみると
こんなかんじで失敗するから
コードを修正してみる
public class Calc { public int plus(int a, int b) { return 3; } }
そうすると、こんな感じでテストが通るってさ。
あとでMockの話も少し書こう