2

パラメータ化されたテストを 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()てこれにテストを追加することもできます。理想的には、パラメーター化されたテストを、既に持っている残りの「通常の」テストに追加したいと考えています。これを行う方法を知っている人はいますか?

4

1 に答える 1

1

完全に満足できるわけではありませんが、私にとってうまくいく解決策は、への呼び出しを に置き換えること super.getAllTests()ですnew TestSuite()

于 2013-03-07T02:22:35.740 に答える