2010-08-06 206 views
2

所以,我是新來的Android單元測試。我試圖寫的電話應用的單元測試:Android應用程序單元測試

package com.android.phone; 

import android.content.Intent; 
import android.net.Uri; 
import android.test.ApplicationTestCase; 
import android.test.suitebuilder.annotation.MediumTest; 

import com.android.phone.PhoneApp; 

import dalvik.annotation.TestTargetClass; 

@TestTargetClass(PhoneApp.class) 
public class TestPhone extends ApplicationTestCase<PhoneApp> { 

     public TestPhone() { 
       super(PhoneApp.class); 
     } 

     private PhoneApp phone; 

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

     @MediumTest 
     public void testDialerIsUp() { 
       assertNotNull("Phone app does not exist", phone); 
       // TODO add tests 
     } 

} 

然後,我開始一個模擬器,等到它啓動起來,並運行這些測試:

adb shell am instrument -e class com.android.phone.TestPhone -r -w com.android.phone.tests/android.test.InstrumentationTestRunner 

現在我得到一個junit.framework.AssertionFailedError: PhoneApp does not exist。這裏出了什麼問題,爲什麼PhoneApp不能啓動?

回答

0

您不顯示您的PhoneApp的代碼。你是否從android.app.Application類派生了一個PhoneApp類?或者你是否期望在那裏有一些名爲PhoneApp的東西可以測試?

如果您希望測試某些東西,您需要編寫一個android.app.Application類作爲項目的一部分。

或者,也許你在談論我不明白的事情。這總是可能的。

+0

這個程序是Android平臺的一部分。 – folone 2010-08-06 20:23:50

+0

例如,可以在這裏找到:http://www.netmite.com/android/mydroid/packages/apps/Phone/src/com/android/phone/PhoneApp.java – folone 2010-08-12 13:36:05

0

如果你只是堅持使用SDK,它甚至可以在「PhoneApp.class」中進行編譯?

我知道你可以使用Robotium來測試現有的應用程序。

+0

我不只是堅持SDK。我有整個平臺的來源。 – folone 2010-09-30 09:18:23

2

實際上,我建議在調用phone = getApplication()之前,在setUp()方法中調用createApplication()。

0

在卡里姆的回答闡述(它的工作),這是設置方法:

MyApplication application; 

    @Override 
    protected void setUp() throws Exception { 
      super.setUp(); 
      createApplication(); 
      application = getApplication(); 
    }