Android测试教程6--测试我们的Application

有时候我们会继承我们的Application,然后在里面加多一些全局的设置,常量啊等等。

那么该如何测试呢?
这里举一个简单的例子
来测试一下用SharedPreferences保存和读取数据。

测试代码

public class MyApplicationTest extends ApplicationTestCase<MyApplication> {

    private MyApplication mApplication; 

    public MyApplicationTest() {
        this(MyApplicationTest.class.getSimpleName());
    }

    public MyApplicationTest(String name) {
        super(MyApplication.class);
        setName(name);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        //不调用的话就getApplication返回null
        createApplication();
        mApplication = getApplication();
    }

    public final void testPreconditions() {
        assertNotNull(mApplication);
    }

    public void testSetDec() {
        int dec = 3;
        mApplication.setDec(dec);
        assertEquals(dec, mApplication.getDec());
    }
}

在这类,我们继承于ApplicationTestCase,要测试的类是MyApplication

MyApplication代码

public class MyApplication extends Application {

    SharedPreferences mSharePrferenc;
    private String KEY = "KEY";

    @Override
    public void onCreate() {
        super.onCreate();
        mSharePrferenc = PreferenceManager.getDefaultSharedPreferences(this);
    }

    public void setDec(int dec) {
        mSharePrferenc.edit().putInt(KEY, dec).apply();
    }
    public int getDec() {
        return mSharePrferenc.getInt(KEY,-1);
    }
}

后记

在测试过程,遇到了下面的问题。

junit.framework.AssertionFailedError
at android.test.ActivityUnitTestCase.startActivity(ActivityUnitTestCase.java:147)
at com.example.administrator.testapplication.activity.MainActivityTest.testLifeCycleCreate(MainActivityTest.java:63)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)

后来加多了一句,就好了。

@Override
    protected void setUp() throws Exception {
        super.setUp();

        renamingMockContext = new RenamingMockContext(getInstrumentation().getTargetContext());
        renamingMockContext.makeExistingFilesAndDbsAccessible();
        setActivityContext(renamingMockContext);
        mStartIntent = new Intent(Intent.ACTION_MAIN);
    }

就是加多这么一句renamingMockContext.makeExistingFilesAndDbsAccessible();
就可以像书本说的那样,遇到UnsupportedOperationException

java.lang.UnsupportedOperationException
at android.test.mock.MockContext.databaseList(MockContext.java:215)
at android.test.RenamingDelegatingContext.makeExistingFilesAndDbsAccessible(RenamingDelegatingContext.java:76)
at com.example.administrator.testapplication.activity.MainActivityTest.setUp(MainActivityTest.java:39)

可能你觉得奇怪,因为我的测试的案例里面的setUP函数没有把mock加上去,因为一直遇到AssertionFailedError,所以就没在代码加上去,只是在这里备注给自己看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值