Android 中的单元测试(使用AndroidTestCase 进行 Content Provider 测试)

Android官方的解释是:Extend this if you need to access Resources or other things that depend on Activity Context.,如果你需要用到资源或者Activity Content,可以继承这个类进行单元测试。

我们这里拿Android中例子 “NotePad” 中的Content Provider来做测试。

首先是建立一个针对NotePad项目的测试项目,方法如我们的单元测试第一篇。

这里新建一个类叫TestNotePadProvider,下面是代码

package com.example.android.notepad.test;

import com.google.provider.NotePad;

import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.test.AndroidTestCase;

public class TestNotePadProvider extends AndroidTestCase{
	ContentResolver mContentResolver;
    @Override
	protected void setUp() throws Exception {
		super.setUp();
		//AndroidTestCase 中核心的就是getContext(),可以得到一个模拟的context
		mContentResolver = getContext().getContentResolver();
	}
	public void testInsertData() {
		ContentValues values = new ContentValues();
		values.put(NotePad.Notes.TITLE, "title1");
		values.put(NotePad.Notes.NOTE, "body");
		Uri uri = NotePad.Notes.CONTENT_URI;
		Uri resultUri = mContentResolver.insert(uri, values);
		//测试是否真的插入数据了
		assertNotNull(resultUri);
		//测试完删除所有数据
		mContentResolver.delete(uri, NotePad.Notes.TITLE + "=" + "'title1'", null);
		
	}
    public void testDeleteData() {
    	Uri uri = NotePad.Notes.CONTENT_URI;
    	//删除所有数据
		mContentResolver.delete(uri, null, null);
		String[] projection = new String[]{
				NotePad.Notes.TITLE,
				NotePad.Notes.NOTE
		};
		Cursor cursor = mContentResolver.query(uri, projection, null, null, null);
		//如果查找的时候,没有发现一条数据,表示删除成功。
		if(cursor !=null && cursor.moveToFirst()){
			assertTrue(false);			
		}else {
			assertTrue(true);
		}
		if(cursor != null){
			cursor.close();
		}
	}
}

Android 中的单元测试(使用AndroidTestCase 进行 Content Provider 测试)_第1张图片

注意到我们这里只有两个测试方法,其实还远远不够的,还要测试非法URI, 更新数据,删除一条记录等等,大家在平时项目中可以完善自己的测试,这里只是一个简单的例子。

感觉Android中的Content Provider完全可以用CodeSmith来生成,有机会试试看。

最后是源码下载:NotePad
文章源地址:http://www.waitingfy.com/?p=96

你可能感兴趣的:(Android 中的单元测试(使用AndroidTestCase 进行 Content Provider 测试))