2010-08-06 162 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(); 
    }