Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ActivityUnitTestCase时出现运行时异常,但在ActivityInstrumentationTestCase2时不出现运行时异常_Java_Android_Junit_Instrumentation - Fatal编程技术网

Java 使用ActivityUnitTestCase时出现运行时异常,但在ActivityInstrumentationTestCase2时不出现运行时异常

Java 使用ActivityUnitTestCase时出现运行时异常,但在ActivityInstrumentationTestCase2时不出现运行时异常,java,android,junit,instrumentation,Java,Android,Junit,Instrumentation,我试图用ActivityUnitTestCase测试Android应用程序的可维护性。由于某些原因,我甚至无法启动测试,因为它失败并出现以下错误跟踪: java.lang.RuntimeException: Exception during suite construction at android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests.testSuiteConstructionFailed(TestSuiteBuilder

我试图用ActivityUnitTestCase测试Android应用程序的可维护性。由于某些原因,我甚至无法启动测试,因为它失败并出现以下错误跟踪:

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()。如果是这样,我如何才能创建启动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);
    }
}
公共类MainActivityUnitTest扩展
android.test.ActivityUnitTestCase{
私人活动;
public MainActivityUnitTest(字符串名称){
超级(MainActivity.class);
}
@凌驾
受保护的void setUp()引发异常{
super.setUp();
}
@小测验
公共无效测试活动(){
Intent Intent=新的Intent(getInstrumentation().getTargetContext(),
主要活动(课堂);
startActivity(意向、无效、无效);
activity=getActivity();
assertNotNull(活动);
}
}

谢谢你提供的任何帮助

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

我在构造函数中调用setName(),它就可以工作了
试试这个:

public MainActivityUnitTest(字符串名称){

}


问题出在构造函数中的参数“name”中。拆卸时,它运行良好。:)我想把它作为一个解决方案发布,但我没有足够的信誉点。就我的情况而言,我的构造函数仍然是空的,没有参数化耶。。。显然,带有
String
参数的构造函数是由工具专门处理的——它应该设置测试用例的名称。因此,阉割你的构造器使它运行顺利。
super(MainActivity.class);
setName("MainActivity");