我想将参数化测试添加到我的 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{codeguru.example.testrunner.tests/codeguru.example.testrunner.ExampleTestRunner} 的 onCreate()中引发异常: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):在 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(Native Method) 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 更多
显然,我得到一个 NPE,因为super.getAllTests()
返回null
. 我当然可以创建一个new TestSuite()
并将我的测试添加到这个。理想情况下,我想将我的参数化测试添加到我已经拥有的其余“正常”测试中。有谁知道我可以做到这一点的方法吗?