gpt4 book ai didi

android - 使用自定义 InstrumentationTestRunner 添加 Android JUnit 测试

转载 作者:行者123 更新时间:2023-11-28 20:12:21 27 4
gpt4 key购买 nike

我要添加parameterized tests to my Android app test suite .在回答我之前的问题时,@dtmilano 建议我实现一个可以将参数传递给我的参数化测试的测试运行器。我想将这些传递给测试的构造函数而不是直接传递给 retrieving them via getter methods .作为一个简单的例子,我扩展了 InstrumentationTestRunner:

public class ExampleTestRunner extends InstrumentationTestRunner {

@Override
public TestSuite getAllTests() {
TestSuite suite = super.getAllTests();
suite.addTest(new TestRunnerActivityTest()); // line 22
return suite;
}
}

我还更新了测试项目的 list :

<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: Exception thrown in onCreate() of ComponentInfo{codeguru.example.testrunner.tests/codeguru.example.testrunner.ExampleTestRunner}: java.lang.NullPointerExceptionE/AndroidRuntime(  880):        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4145)E/AndroidRuntime(  880):        at android.app.ActivityThread.access$1300(ActivityThread.java:130)E/AndroidRuntime(  880):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255)E/AndroidRuntime(  880):        at android.os.Handler.dispatchMessage(Handler.java:99)E/AndroidRuntime(  880):        at android.os.Looper.loop(Looper.java:137)E/AndroidRuntime(  880):        at android.app.ActivityThread.main(ActivityThread.java:4745)E/AndroidRuntime(  880):        at java.lang.reflect.Method.invokeNative(Native Method)E/AndroidRuntime(  880):        at java.lang.reflect.Method.invoke(Method.java:511)E/AndroidRuntime(  880):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)E/AndroidRuntime(  880):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)E/AndroidRuntime(  880):        at dalvik.system.NativeStart.main(Native Method)E/AndroidRuntime(  880): Caused by: java.lang.NullPointerExceptionE/AndroidRuntime(  880):        at codeguru.example.testrunner.ExampleTestRunner.getAllTests(ExampleTestRunner.java:22)E/AndroidRuntime(  880):        at android.test.InstrumentationTestRunner.getTestSuite(InstrumentationTestRunner.java:581)E/AndroidRuntime(  880):        at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:360)E/AndroidRuntime(  880):        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4142)E/AndroidRuntime(  880):        ... 10 more

显然,我得到了一个 NPE,因为 super.getAllTests() 返回 null。我当然可以只创建一个 new TestSuite() 并将我的测试添加到其中。理想情况下,我想将我的参数化测试添加到我已经拥有的其余“正常”测试中。有谁知道我可以这样做的方法吗?

最佳答案

虽然不完全令人满意,但对我有用的解决方案是用 new TestSuite() 替换对 super.getAllTests() 的调用。

关于android - 使用自定义 InstrumentationTestRunner 添加 Android JUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15103103/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com