`
kukuqiu001
  • 浏览: 208952 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

android 单元测试, 以sqlite测试为例

阅读更多
Android测试,测试activity,使用InstrumentationTestCase类
测试后台逻辑,使用 AndroidTestCase 类
Android单元测试,主要目的是为了保证复杂逻辑是否正常正确,以及依据TDD的原则,测试先于编码,理清代码编写的思路。
主要以AndroidTestCase类测试复杂逻辑来讲解:
以android sqlite数据库逻辑代码的测试为例。
数据库逻辑代码:
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;

import com.android.hanhan.R;

public class DatabaseService {
	private DatabaseHelper dbOpenHelper;
	protected static final String TBL_NAME = "article";
	protected static final String FIELD_ID = "id";
	protected static final String FIELD_TITLE = "title";
	protected static final String FIELD_CONTENT = "content";
	protected static final String FIELD_DELETE = "deleted";
	protected static final String FIELD_PUBLISHDATE = "publishdate";
	protected static final String FIELD_FAVORITE = "favorite";
	protected static final String FIELD_CLICKCOUNT = "clickcount";
	protected static final String FIELD_FAVORITEDATE = "favoritedate";

//构造器,初始数据库服务
	public DatabaseService(Context context) {
		dbOpenHelper = new DatabaseHelper(context);
	}

// 删除表
	public void dropTable(String taleName) {
		dbOpenHelper.getWritableDatabase().execSQL(
				"DROP TABLE IF EXISTS " + taleName);
	}
// 关闭数据库
	public void closeDB() {
		dbOpenHelper.getWritableDatabase().close();
	}
// 取得数据库TBL_NAME 表的所有数据
	public List<Map<String, Object>> fetchALLArticle() {
		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		Cursor cur = db.query(TBL_NAME, new String[] {FIELD_ID, FIELD_TITLE, FIELD_CONTENT,
						FIELD_PUBLISHDATE,FIELD_FAVORITE ,FIELD_DELETE }, null, null, null,
						null, null);
		list = getListFromDb(list, cur);
		return list;
	}
// 取得数据库TBL_NAME表的数据个数
	public long getPageCount(){
		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
		return DatabaseUtils.queryNumEntries(db, TBL_NAME);
	}
// 根据分页尺寸和页数,取得数据列表	
	public  List<Map<String, Object>> fetchCustomArticle(long pageSize, long pageID) {
		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		String sql = "select * from " + TBL_NAME +     
         " Limit "+String.valueOf((pageID-1)*pageSize)+" ,"+String.valueOf((pageID)*pageSize);
		Cursor cur = db.rawQuery(sql, null);
		list = getListFromDb(list, cur);
		return list;
	}
//取得数据列表方法
	private List<Map<String, Object>>  getListFromDb(List<Map<String, Object>> list, Cursor cur) {
		if(cur.moveToFirst()){
			do{
			Map<String, Object> map = new HashMap<String, Object>();
			map = addValueToMap(cur);
			list.add(map);
			}while(cur.moveToNext());
		}
		return list;
	}
// 将数据映射到map
	private Map<String, Object> addValueToMap(Cursor cur) {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("id", cur.getString(cur.getColumnIndex(FIELD_ID)));
		map.put("title", cur.getString(cur.getColumnIndex(FIELD_TITLE)));
		map.put("info", cur.getString(cur.getColumnIndex(FIELD_PUBLISHDATE)));
		map.put("content", cur.getString(cur.getColumnIndex(FIELD_CONTENT)));
		map.put("publishdate", cur.getString(cur.getColumnIndex(FIELD_PUBLISHDATE)));
		map.put("favorite", cur.getString(cur.getColumnIndex(FIELD_FAVORITE)));
		map.put("delete", cur.getString(cur.getColumnIndex(FIELD_DELETE)));
		map.put("img", R.drawable.stop);
		return map;
	}
	
}


数据库单元测试代码,测试数据取得所有数据方法和 getPageCount()方法
import android.test.AndroidTestCase;
import com.android.hanhan.util.DatabaseService;

public class DatabaseServiceTest extends AndroidTestCase{
	private DatabaseService dbs;
	
	@Override
	protected void setUp() throws Exception {
		dbs = new DatabaseService(getContext());
	}

	@Override
	protected void tearDown() throws Exception {
		dbs.closeDB();
	}
	
	public void testPageCount() throws Exception{
		assertEquals(12, dbs.getPageCount());
	}
	
	public void testFetchALLArticle() throws Exception{
		assertEquals(12, dbs.fetchALLArticle().size());
	}
	
}



如果为绿色,则通过;红色,表示不通过
如出错,android junit test会有详细的错误信息,方便更正,更能确保程序的健壮

当然需要配置AndroidManifest.xml 文件
<!-- android 单元测试需要添加的内容  -->
<uses-library android:name="android.test.runner" />
<instrumentation android:targetPackage="com.android.abc"  
   android:label="Test Sqlite" android:name="android.test.InstrumentationTestRunner">
</instrumentation>  
分享到:
评论

相关推荐

    android_sqlite测试

    SQLite是一种轻量级的小型数据库,虽然比较小,但是功能相对...Android系统中也不例外,也是采用SQLite,本节中就学习下在andorid中怎样使用该数据库来存放数据,并且对SQLite完成简单的新建,更新,查询,删除等操作。

    测试android sqlite insert and delete 方法的返回值

    验证android sqlite数据库insert 和delete 方法返回值的具体规律 insert 插入一行,如果当前最大id是4,insert新的一条记录id是5 ,如果把5删除, 在insert一条新的记录id还是5,如果删除的是id为4的记录, 再新增一...

    android studio1.2 sqlite的操作

    android studio1.2 sqlite的操作 测试通过 转:http://www.jb51.net/article/36062.htm 这个例子的基础上修改

    android连接SQLite数据库源代码

    五、单元测试类要注意的 AndroidCRUDService curdService = new AndroidCRUDService(this.getContext()); /* * 注意:getContext必须在我们使用前已经注解进去的,在使用前要实力化,而且是使用后才有上下文 *一般...

    Android 解决sqlite无法创建新表的问题

    使用SQLite时,继承...最好使用sqllite expert编辑代码测试,再复制到Android studio中 2.如果没有的话就要注意数据类型(integer、text、float等)前面一定要有一个空格否则 属性名就会变成**“KEY_IDInteger

    Android Studio 2022+SQLite 5.4

    Android Studio是一个由Google开发的,用于Android应用程序开发的...SQLite可以在各种操作系统和编程语言中使用,包括Android、iOS、Windows、Linux等,同时还可以使用多种编程语言进行开发,方便了对开发人员的使用。

    Android-SQLite和SQLCipher性能测试

    SQLite和SQLCipher性能测试

    Android Sqlite OrmLite框架 对象关系映射

    Google开源的基于Android的Sqlite对象关系映射框架 ormlite 压缩包里包含 ormlite-android-4.30.jar 及帮助文档、ormlite-core-4.30.jar核心包 当然也支持在Java中的Jdbc中使用类似Hibernate Sqlite驱动包、ormlite...

    DBSQLite android数据增删改查的方法 以及测试

    DBSQLite android数据增删改查的方法 以及测试

    android-SQLite.rar_Android SQL_SQL android_android_android sql

    android SQLite数据库的增删改查以及事务的单元测试

    Android 真机安装 sqlite3 & libncurses.so

    本资源中有:真机安装sqlite3文档以及针对5.0以上和以下版本的资源文件,真机测试通过 libncurses.so

    无废话Android 系列教程35 [Android下的数据库SQLite事务概念及使用&&测试]

    NULL 博文链接:https://huiqinbo.iteye.com/blog/2247535

    ExportSQLite:MySQLWorkbench的插件,用于导出SQLite文件

    ##版本已使用MySQLWorkbench 5.2.36进行实施和测试,需要对该项目进行更新以支持较新的版本##用法从MySQLWorkbench,转到“脚本-&gt;安装插件/模块…”; 在对话框中,选择ExportSQLite.grt.lua脚本; 重新启动...

    基于Android平台的课堂测试系统.zip

    本系统是一个基于Android的课堂测试系统,学生在课上进行测试就是本系统实现的基本功能。设计出一个老师能够自主发布试题,学生能够在Android移动端进行测试,本课堂测试系统的基本目标就算完成。本系统中,一共包括...

    android SQLite使用模版

    本程序是一个SQLite的规范使用示例,程序涉及到: SQLite 增、删、改、查、SQL版本更新,ListView创建条目生成,单个条目点击事件处理,程序中通过Junit来实现单元测试。

    android sqlite3 数据库操作大全

    但因为某些原因,没有使用上,今天被我发现,删除可惜,特此把它贡献出来,里面数据库的增删改查各个方法我都写了,还有我在MainActivity对我所写的各个方法都写了测试实例,对sqlite3数据库操作不熟悉的人,...

    android sqlite示例代码

    实现基本的sqlite操作,简单易学,本地化嵌入式数据库操作支持。2.3.3,4.0版本测试通过。

    sqlite for unity 支持ios android mac

    sqlite for unity with mac # 需要啥条件才能使用: 1. unity3d在mac下开发 # 可以支持发布哪些平台: 1. mac 2. ios 3. android # 附加的脚本文件: 1. 一个封装过的helper 2. 一个测试脚本(调用helper)

    Android测试光照强度的简易APP

    【下载前请查看主页内关于测试光照强度的文章】 该资源是基于Android开发的测试光照强度的APP,是使用手机的光线传感器来获取数据,并将数据写入SQLite数据库中。

    houseelectricsorm:android上sqlite的对象关系映射

    这是android上sqlite对象关系映射的一个实现。 它包含一组最少的功能,用于将 Java 对象模型映射到 android 应用程序中的关系数据库,但仍然给开发人员带来了低负担。 以下是一些功能: 域对象中没有数据库 id...

Global site tag (gtag.js) - Google Analytics