Android自动化测试之路——Provider(一)

在这个组件的测试过程中,我们尝试了两种方式去获取数据库:

1、被测程序对外提供的ContentProvider接口;

2、通过Instrumentation的getTargetContext拿到的数据库列表,然后自定义一个SQLiteOpenHelper的子类去完成数据库的访问。

首先来说一下第一种方式的测试过程:

前提:要测试provider需要你知道被测程序提供出来的URIAUTHORITY

1、你需要新建一个测试类去继承ProviderTestCase2类,然后在测试类的无参构造函数中调用父类的构造方法super(Class providerClass, String providerAuthority);(当然最好是得有被测应用的源码,如果没有你得知道前提和provider类完整的包名。

2、需要你重写setup方法,在super.setup()后面开始写(这句是必须,因为它会完成MockContentResolver和IsolatedContext的初始化),如:

@Override
    protected void setUp() throws Exception {
        // TODO Auto-generated method stub
        super.setUp();
        
        mMockResolver = getMockContentResolver();
        mProvider = mProviderClass.newInstance();
        assertNotNull(mProvider);
        
        mProvider.attachInfo(getContext(), null);
        mMockResolver.addProvider(mProviderAuthority, mProvider);
        
    }

你最好在重写getProvider这个方法来测试setup中是否成功创建的了被测的provider。完了之后的测试用例中就可以使用生成的mMockResolver来进行测试了。(最后别忘了测试的具体内容,上篇转的别人翻译官网的说明“Contentprovider测试”)

最终测试用例如:

public void testInsert(){
        ContentValues values = new ContentValues();
        
        values.put(NotePad.NoteColumns.TITLE, "测试标题");
        values.put(NotePad.NoteColumns.NOTE, "测试内容是什么");
        
        // insert
        //mMockResolver.insert(NotePad.NoteColumns.CONTENT_URI, values);
        
        String[] a = {"测试标题"};
        
        // query
        Cursor c = mMockResolver.query(NotePad.NoteColumns.CONTENT_URI, null, 
                NotePad.NoteColumns.TITLE + "=?",a, null);
        
        Log.d("Notepad", c.getCount()+"");
        
        while (c.moveToNext()) {
            Log.d("Notepad_insert", c.getString(c.getColumnIndex(NotePad.NoteColumns.NOTE)));
            Log.d("Notepad_insert", c.getString(c.getColumnIndex(NotePad.NoteColumns.NOTE)));
            assertEquals("测试标题", c.getString(c.getColumnIndex(NotePad.NoteColumns.TITLE)));
            assertEquals("测试内容是什么", c.getString(c.getColumnIndex(NotePad.NoteColumns.NOTE)));
        }
    
    }

 

posted @ 2014-12-04 14:54  xiao.kkp  阅读(417)  评论(0编辑  收藏  举报