パラメータ化されたテストを Android アプリのテスト スイートに追加したいと考えています。以前の質問への回答で、@dtmilano は、パラメーター化されたテストに引数を渡すことができるテスト ランナーを実装することを提案しました。これらを getter メソッドで取得するのではなく、直接テストのコンストラクターに渡したいと思います。簡単な例として、InstrumentationTestRunner を拡張しました。
public class ExampleTestRunner extends InstrumentationTestRunner {
@Override
public TestSuite getAllTests() {
TestSuite suite = super.getAllTests();
suite.addTest(new TestRunnerActivityTest()); // line 22
return suite;
}
}
テスト プロジェクトのマニフェストも更新します。
<instrumentation android:name="codeguru.example.testrunner.ExampleTestRunner"
android:targetPackage="codeguru.example.testrunner"
android:label="Tests for codeguru.example.testrunner"/>
このテストを実行すると
$ adb shell am instrument -w codeguru.example.testrunner.tests/codeguru.example.testrunner.ExampleTestRunner
私は得る
E/AndroidRuntime(880): java.lang.RuntimeException: ComponentInfo の onCreate() で例外がスローされました{codeguru.example.testrunner.tests/codeguru.example.testrunner.ExampleTestRunner}: java.lang.NullPointerException E/AndroidRuntime(880): android.app.ActivityThread.handleBindApplication(ActivityThread.java:4145) E/AndroidRuntime(880): android.app.ActivityThread.access$1300(ActivityThread.java:130) E/AndroidRuntime(880): android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255) で E/AndroidRuntime( 880): android.os.Handler.dispatchMessage(Handler.java:99) で E/AndroidRuntime(880): at android.os.Looper.loop(Looper.java:137) E/AndroidRuntime(880): android.app.ActivityThread.main(ActivityThread.java:4745) E/AndroidRuntime(880): java.lang.reflect.Method.invokeNative(ネイティブメソッド) E/AndroidRuntime(880): java.lang.reflect.Method.invoke(Method.java:511) E/AndroidRuntime(880): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) で E/AndroidRuntime (880): com.android.internal.os.ZygoteInit.main (ZygoteInit.java:553) で E/AndroidRuntime(880): dalvik.system.NativeStart.main(ネイティブメソッド) E/AndroidRuntime(880): 原因: java.lang.NullPointerException E/AndroidRuntime(880): codeguru.example.testrunner.ExampleTestRunner.getAllTests(ExampleTestRunner.java:22) で E/AndroidRuntime(880): android.test.InstrumentationTestRunner.getTestSuite(InstrumentationTestRunner.java:581) E/AndroidRuntime(880): android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:360) で E/AndroidRuntime(880): android.app.ActivityThread.handleBindApplication(ActivityThread.java:4142) E/AndroidRuntime( 880): ... 10 以上
super.getAllTests()
を返すので、明らかに NPE を取得しますnull
。もちろん、 を作成しnew TestSuite()
てこれにテストを追加することもできます。理想的には、パラメーター化されたテストを、既に持っている残りの「通常の」テストに追加したいと考えています。これを行う方法を知っている人はいますか?