2012/07/28
Android JUnit で Parameterized test case
先日、
JUnit3 で Parameterized test case (1)
JUnit3 で Parameterized test case (2)
というエントリを書きましたが、本当は、Android JUnit で Parameterized test をしたかったのです。
Native Java Project なら、おとなしく JUnit4 を使っておけば良いわけですから。
というわけで、早速 JUnit3 で Parameterized test case (2) で作成したコードを Android JUnit に移植してみました。
今回のプロジェクトは以下にアップしてあります。ご自由にお使いください。
AndroidJUnit3Experiment.zip
単純には動作せず
まず、単純に Android JUnit プロジェクトを作成し、昨日のコードを移植。プロジェクトを選択して Run As Android JUnit Test を実行してみました。
しかし、何も起こりません。
各テストケースを選択した場合は動作するので、テストケースの問題ではなさそうです。
どういうこと?
と思いつつ調べてみると、どうも Android JUnit を立ち上げた時に走る
InstrumentationTestRunner
は独自コンストラクタのテストケースを無視するみたいです。解決策
少し調べてみたところ、独自のTestRunner
を作成してやれば良いことがわかりました。以下が具体的な
TestRunner
です。getAllTests()
をオーバーライドして、実行したい TestSuite
を返すようにします。TestSuite
については、先日のエントリを参照して下さい。AndroidJUnit3ExperimentTestRunner.java
public class AndroidJUnit3ExperimentTestRunner extends InstrumentationTestRunner { @Override public TestSuite getAllTests() { TestSuite testSuite = new TestSuite(); testSuite.addTest(CalcTwiceTest.suite()); testSuite.addTest(CalcSquareTest.suite()); return testSuite; } }
AndroidManifest.xml を以下のように書き換えます。
Android JUnit プロジェクトを作成すると、
instrumentationTestRunner
はデフォルトで記述されていますが、それを自作のものに挿げ替えるわけです。AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.kokufu.android.experiment.junit3.test" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" /> <instrumentation android:name=".AndroidJUnit3ExperimentTestRunner" android:targetPackage="com.kokufu.android.experiment.junit3" /> <application> <uses-library android:name="android.test.runner" /> </application> </manifest>
テスト実行
この状態でプロジェクトを選択して Run As Android JUnit Test とすると、見事動作しました。AndroidManifest を書き換えた後にエラーが出ることがある
一度、Android JUnit Test を走らせた後に、AndroidManifest を書き換えると、以下のようなエラーが出ることがあります。XXX is not configured correctly for running tests: A targetPackage attribute for instrumentation YYY in its AndroidManifest.xml could not be found!
この場合は、Run → Run Configurations...
実行しようとしている Android JUnit Test の構成仕様を削除 を実行すると直ります。
2.2以前では動作せず
このテストを Android 2.2 以前の端末で動かした場合、以下のようなエラーが出て正しく動作しませんでした。ちょっと原因を追いきれていないのですが、複数の端末&Emulatorで同様の結果となったことから、Android 2.2以前と2.3の間に何か変更があったようです。Test run failed: Test run failed to complete. Expected 10 tests, received 0
残念ながら、このテストは Android 2.3 以降で動かす必要がありますので、ご注意ください。
0 件のコメント:
コメントを投稿