Android[中级教程]第四章 单元测试AndroidTestCase

来源:互联网 发布:知乎大学生店铺淘宝 编辑:程序博客网 时间:2024/05/17 00:06

 相信很多同学都会有操作SQLite不方便的感觉,对于数据库操作又不能很明显地看出问题,这里我们就接上一章的SQLite操作辅助类进行单元测试,OK,我们来看一下类码:首先是DatabaseHelper.java

import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class DatabaseHelper extends SQLiteOpenHelper{//数据库名称private static final String DB_NAME = "SQLiteDemo.db";//数据库版本private static final int DB_VERSION = 1;//表名public static final String TABLE_NAME = "demo";private static final String DB_CREATE = "create table " + TABLE_NAME +  " (_id integer primary key autoincrement, name varchar(20), number varchar(10))";public DatabaseHelper(Context context){super(context, DB_NAME, null, DB_VERSION);}/** * 创建表 */@Overridepublic void onCreate(SQLiteDatabase db){db.execSQL(DB_CREATE);}/** * 更新表 */@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){//db.execSQL("drop table if exists " + TABLE_NAME);//onCreate(db);}}

接着再上数据操作辅助类DatabaseServer.java

import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;public class DatabaseServer{private DatabaseHelper dbHelper;public DatabaseServer(Context context){this.dbHelper = new DatabaseHelper(context);}/** * 插入数据 *  * @param name *            名字 * @param number *            数据 * @return 如果成功则返回true,否则返回false */public boolean insert(String name, String number){//创建或打开数据库SQLiteDatabase db = dbHelper.getWritableDatabase();ContentValues cv = new ContentValues();cv.put("name", name);cv.put("number", number);//插入数据,返回插入数据IDlong id = db.insert(dbHelper.TABLE_NAME, null, cv);if (id != 0){return true;}return false;}/** * 更新数据 *  * @param id *            数据列_id * @param number *            数量 * @return 如果成功则返回true,否则返回false */public boolean update(int id, String number){SQLiteDatabase db = dbHelper.getWritableDatabase();//Android自带的ContetValues,类似于Map,提供了put(String key, XXX value)的方法存入数据ContentValues cv = new ContentValues();cv.put("number", number);//通过ContentValues更新数据表,返回更新的ID值int result = db.update(dbHelper.TABLE_NAME, cv, "_id=?",new String[] { String.valueOf(id) });if (result != 0){return true;}return false;}/** * 删除数据 *  * @param id *            数据列_id * @return */public boolean delete(int id){SQLiteDatabase db = dbHelper.getWritableDatabase();//删除指定ID值int result = db.delete(dbHelper.TABLE_NAME, "_id=?",new String[] { String.valueOf(id) });if (result != 0){return true;}return false;}/** * 查询数据 *  * @return 返回数据列表 */public Cursor fetchAll(){SQLiteDatabase db = dbHelper.getReadableDatabase();//查询数据表中所有字段Cursor cursor = db.query(dbHelper.TABLE_NAME, null, null, null, null,null, "_id desc");if (cursor != null){return cursor;}return null;}}

这里两个类都建好了,但我们要测试一下我们建的这两个类是否工作正常,能否插入,更新,删除,查询数据,这里我们就用了TestCase来做测试

SQLiteDemoTest.java

import android.database.Cursor;import android.test.AndroidTestCase;public class SQLiteDemoTest extends AndroidTestCase{private DatabaseServer dbServer;/** * 测试插入数据 */public void testinsert(){dbServer = new DatabaseServer(this.getContext());boolean flag = dbServer.insert("沙僧", "10");System.out.println(flag);}/** * 测试查询数据 */public void testfetchAll(){dbServer = new DatabaseServer(this.getContext());Cursor cursor = dbServer.fetchAll();while (cursor.moveToNext()){System.out.println(cursor.getString(1));System.out.println(cursor.getString(2));}}/** * 测试更新数据 */public void testupdate(){dbServer = new DatabaseServer(this.getContext());boolean flag = dbServer.update(1, "20");System.out.println(flag);}/** * 测试删除数据 */public void testdelete(){dbServer = new DatabaseServer(this.getContext());boolean flag = dbServer.delete(1);System.out.println(flag);}}

当然,别忘记了,在AndroidManifest.xml中还要加入测试库文件

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.kang.button_demo" android:versionCode="1"android:versionName="1.0"><uses-sdk android:minSdkVersion="10" /><application android:icon="@drawable/icon" android:label="@string/app_name"><uses-library android:name="android.test.runner" /><activity android:label="@string/app_name" android:name=".SQLiteDemo"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application><instrumentation android:name="android.test.InstrumentationTestRunner"android:targetPackage="com.kang.button_demo" android:label="Tests for My App" /></manifest>

这里有一个<uses-library>这是测试库,必须要加入的,还有就是最后<instrumentation android:name="android.test.InstrumentationTestRunner"
  android:targetPackage="com.kang.button_demo" android:label="Tests for My App" />也是必须加的,这是定义测试包的,你的测试文件必须要放在根包下的,这里我的根包是com.kang.button_demo

好了,你可以运行一下,看是否是出现蓝条,而不是红条,呵呵,上图