Android应用程序单元测试

Android应用程序单元测试,android,unit-testing,junit,Android,Unit Testing,Junit,所以,我对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.Pho

所以,我对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
        }

}

现在我得到了一个
junit.framework.AssertionFailedError:PhoneApp不存在
。这里出了什么问题,为什么PhoneApp没有启动?

您没有显示PhoneApp的代码。您是否从android.app.Application类派生了PhoneApp类?或者你是在期待有一个叫做PhoneApp的东西可以测试吗

如果你想测试一些东西,你需要在你的项目中编写一个android.app.Application类


或者,也许,你正在谈论一些我不明白的事情。这总是有可能的。

如果您坚持使用SDK,那么在其中包含“PhoneApp.class”的情况下,这是如何编译的


我知道你可以使用Robotium来测试现有的应用程序

实际上,我建议在调用phone=getApplication()之前,先在setUp()方法中调用createApplication()。

详细说明Karim的答案(它确实有效),这是设置方法:

    MyApplication application;

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

这个应用程序是android平台的一部分。例如,可以在这里找到:我不只是坚持SDK。我有整个平台的资料来源。
    MyApplication application;

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