`
kukuqiu001
  • 浏览: 210330 次
  • 性别: 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

    "Android电话号码簿Sqlite" Android操作系统是一个基于Linux的开源码操作系统,主要用于便携设备。随着Android技术的出现,越来越多的手机开发商采用Android操作系统,因此Android通讯录的开发也变得必不可少。本...

    Android Studio 2022+SQLite 5.4

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

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

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

    Android-sqlite3命令-Android开发-sqlite3_armv7

    在Android开发中,掌握`sqlite3`命令行工具的使用对于调试和测试数据库操作至关重要。以下是一些基本的`sqlite3`命令: 1. **.open**:打开一个SQLite数据库文件。 2. **.tables**:列出数据库中的所有表格。 3. **...

    Android数据库查看工具SqliteStudio-2.1.5.rar

    **Android数据库查看工具SqliteStudio** SqliteStudio是一款强大的SQLite数据库管理工具,尤其适用于Android开发者。SQLite是Android系统默认的轻量级关系型数据库,广泛应用于应用程序的数据存储。SqliteStudio...

    android SQLiteStudio v2.15

    总之,SQLiteStudio v2.15作为一款强大的SQLite数据库管理工具,为Android开发者提供了便利,使得在开发过程中对SQLite数据库的管理和调试变得更加高效和直观。通过使用这个工具,开发者可以更好地理解和控制其应用...

    Android平台sqlite3数据库

    在Android平台上,SQLite3是一个至关重要的组件,它是一个轻量级的、自包含的、无服务器的、事务型的关系数据库引擎。这篇知识分享将深入探讨SQLite3在Android系统中的应用,以及如何处理从AVD(Android Virtual ...

    android安卓SQLiteManager

    1. 安装与集成:SQLiteManager通常以插件形式存在于Android Studio或其他集成开发环境中,按照指示进行安装并配置。 2. 连接数据库:在SQLiteManager中选择需要操作的应用,连接到对应的数据库文件。 3. 执行SQL:在...

    Android SQLite

    SQLite被集成到Android系统中,为开发者提供了高效、可靠的本地数据存储解决方案。在这个简单的使用例子中,我们将探讨如何在Android应用中创建、操作和查询SQLite数据库。 首先,要在Android应用中使用SQLite,你...

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

    测试SQLite事务是确保应用稳定性和数据完整性的重要环节。可以通过编写JUnit测试用例来模拟并发情况,检查事务的隔离性和持久性。例如,可以创建两个线程,一个进行读操作,另一个进行写操作,观察在事务处理下的...

    android连接SQLite数据库源代码

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

    android sqlite数据库框架

    在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的、开源的、嵌入式的SQL数据库引擎,被广泛用于存储和管理应用程序中的结构化数据。本案例围绕"android sqlite数据库框架"展开,旨在通过Java注解...

    android sqlite数据库简单查看工具

    标题中的“android sqlite数据库简单查看工具”是指一个专为Android平台设计的SQLite数据库查看和编辑工具。这个工具通常具有用户友好的界面,使得开发者和测试人员能够方便地浏览、查询和修改SQLite数据库中的数据...

    ContentProvider单元测试

    总结,ContentProvider单元测试是Android开发中不可或缺的一环,通过合理的测试策略和工具,我们可以确保ContentProvider功能的稳定性和可靠性,为用户提供无缝的数据交互体验。`ProviderTest`文件应该包含了具体的...

    基于Android+SQLite开发医院收费管理系统应用程序【100013180】

    Android Studio是Google推出的一款专为Android应用开发者设计的集成开发环境(IDE),它提供了丰富的工具集,包括代码编辑器、调试器、模拟器等,使得开发者能够高效地构建和测试Android应用。 二、SQLite数据库 ...

    Android基于Sqlite的学生信息管理系统.zip

    开发者需进行单元测试、集成测试以及性能测试,确保每个功能的正确性,系统的整体性能以及在不同设备上的兼容性。 总的来说,“Android基于SQLite的学生信息管理系统”是一个融合了人工智能理念的信息管理解决方案...

    Android-SQLite和SQLCipher性能测试

    本文将深入探讨Android环境下SQLite与SQLCipher的性能测试,以及它们在实际应用中的优缺点。 首先,SQLite作为Android默认的数据库,其性能主要体现在快速的本地数据存取、简单的API接口和良好的兼容性。它的优势...

    Android的Sqlite数据存储

    以"日记本"应用为例,我们需要创建一个"diary"表,包含id(主键)、title(日记标题)、content(日记内容)和date(日记日期)等字段。在SQLiteOpenHelper的子类中,我们可以在onCreate()方法中编写SQL语句来创建这...

    android sqlite_admin 数据库管理软件

    总结来说,"android sqlite_admin"是Android平台上一款实用的SQLite数据库管理软件,它以图形化的方式简化了数据库操作,提升了开发者的体验。对于任何需要在Android应用中使用SQLite数据库的开发者来说,这款工具都...

Global site tag (gtag.js) - Google Analytics