Android自動化測試之路——Provider(一)

在這個組件的測試過程當中,咱們嘗試了兩種方式去獲取數據庫:html

一、被測程序對外提供的ContentProvider接口;java

二、經過Instrumentation的getTargetContext拿到的數據庫列表,而後自定義一個SQLiteOpenHelper的子類去完成數據庫的訪問。android

首先來講一下第一種方式的測試過程:數據庫

前提:要測試provider須要你知道被測程序提供出來的URIAUTHORITYwindows

一、你須要新建一個測試類去繼承ProviderTestCase2類,而後在測試類的無參構造函數中調用父類的構造方法super(Class providerClass, String providerAuthority);(固然最好是得有被測應用的源碼,若是沒有你得知道前提和provider類完整的包名。
eclipse

二、須要你重寫setup方法,在super.setup()後面開始寫(這句是必須,由於它會完成MockContentResolver和IsolatedContext的初始化),如:ide

@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)));
        }
    
    }
相關文章
相關標籤/搜索