java - 使用 ActivityUnitTestCase 时出现 RuntimeException,但在 ActivityInstrumentationTestCase2 时不会

标签 java android junit instrumentation

我正在尝试使用 ActivityUnitTestCase 测试 Android 应用程序的 MainActvity。出于某种原因,我什至无法开始测试,因为它失败并显示以下错误跟踪:

java.lang.RuntimeException: Exception during suite construction
at android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests.testSuiteConstructionFailed(TestSuiteBuilder.java:238)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:537)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1594)
Caused by: java.lang.NullPointerException: name == null
at java.lang.Class.getConstructorOrMethod(Class.java:446)
at java.lang.Class.getMethod(Class.java:915)
at android.test.suitebuilder.TestMethod.getAnnotation(TestMethod.java:60)
at android.test.suitebuilder.annotation.HasMethodAnnotation.apply(HasMethodAnnotation.java:39)
at android.test.suitebuilder.annotation.HasMethodAnnotation.apply(HasMethodAnnotation.java:30)
at com.android.internal.util.Predicates$OrPredicate.apply(Predicates.java:106)
at android.test.suitebuilder.annotation.HasAnnotation.apply(HasAnnotation.java:42)
at android.test.suitebuilder.annotation.HasAnnotation.apply(HasAnnotation.java:31)
at com.android.internal.util.Predicates$NotPredicate.apply(Predicates.java:122)
at android.test.suitebuilder.TestSuiteBuilder.satisfiesAllPredicates(TestSuiteBuilder.java:253)
at android.test.suitebuilder.TestSuiteBuilder.build(TestSuiteBuilder.java:189)
at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:371)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3943)
at android.app.ActivityThread.access$1300(ActivityThread.java:127)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1189)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4447)
at java.lang.reflect.Method.invokeNative(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)

我无法调试它,因为它在到达我可以放在测试用例类中的任何断点之前就失败了。我对 ActivityInstrumentationTestCase2 类所做的任何测试都没有问题。

在控制台中显示以下错误消息:

Test run failed: Instrumentation run failed due to 'java.lang.RuntimeException'

我假设,它暗示无法成功调用 getInstrumentation()。如果是这样,我怎么才能创建一个有效的 Intent 来启动 MainActivity?

ActivityUnitTestCase 的代码:

public class MainActivityUnitTest extends 
    android.test.ActivityUnitTestCase<MainActivity> {

    private MainActivity activity;

    public MainActivityUnitTest(String name) {
        super(MainActivity.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();  
    }

    @SmallTest
    public void testActivity() {

        Intent intent = new Intent(getInstrumentation().getTargetContext(),
                MainActivity.class);
            startActivity(intent, null, null);
            activity = getActivity();       
        assertNotNull(activity);
    }
}

感谢您提供的任何帮助。

最佳答案

问题出在构造函数中的参数“name”中。删除它时,它运行得非常好。 :)

关于java - 使用 ActivityUnitTestCase 时出现 RuntimeException,但在 ActivityInstrumentationTestCase2 时不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18102887/

相关文章:

java - 错误 : Eclipse 4. 5 MARS NullPointerException(JUnit 测试)

java - 执行方法未在预定时间调用quartz+spring

android - 将数据写入 Android 中的蓝牙 LE 特性

java - 使用 ArrayLists 时如何处理深度递归?

android - faSTLane screengrab : "has not requested permission android.permission.CHANGE_CONFIGURATION"

java - Junit Automation 测试中的某些测试需要许多不同的输入

java - 如何使用缓冲阅读器在文件中搜索字符串

java - ASCII-错误消息,找不到符号

java - 如何读取作为命令参数的文本文件(字符串)的第一行(在Java中使用eclipse)

java - 在单元测试中操纵当前时间?