2013-08-07 27 views
4

我正在嘗試使用ActivityUnitTestCase測試Android應用程序的MainActvity。出於某種原因,我甚至無法開始測試,因爲它失敗,出現以下錯誤跟蹤:使用ActivityUnitTestCase時發生RuntimeException,而ActivityInstrumentationTestCase2時發生RuntimeException

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的Intent?

與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); 
    } 
} 

謝謝你提供的任何幫助。

+0

的問題是在構造函數中的參數 「名稱」。去除它時,它運行得非常好。 :)我會張貼它作爲一個解決方案,但我沒有足夠的聲望點。 –

回答

2

問題出在構造函數的參數「name」中。去除它時,它運行得非常好。 :)

+0

對於我的情況我的構造函數是stil空的沒有參數化 –

+0

是的......顯然,具有'String'參數的構造函數被工具特別對待 - 它應該設置測試用例的名稱。因此,閹割你的構造函數使其運行平穩。 –

1

我在構造函數中調用setName(),它的工作原理。
試試這個:

公共MainActivityUnitTest(字符串名稱){

super(MainActivity.class); 
setName("MainActivity"); 

}

相關問題