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
好了,你可以运行一下,看是否是出现蓝条,而不是红条,呵呵,上图
- Android[中级教程]第四章 单元测试AndroidTestCase
- android单元测试AndroidTestCase
- Android sqlite 单元测试AndroidTestCase
- android单元测试AndroidTestCase
- [android篇]单元测试之AndroidTestCase
- Android 单元测试——AndroidTestCase
- 通过AndroidTestCase来进行android 单元测试
- 通过AndroidTestCase来进行android 单元测试
- 通过AndroidTestCase来进行android 单元测试
- AndroidTestCase来进行android 单元测试简介
- AndroidTestCase来进行android 单元测试简介
- 通过AndroidTestCase来进行android 单元测试
- AndroidTestCase来进行android 单元测试简介
- Android测试教程(15):AndroidTestCase示例
- AndroidTestCase单元测试框架用法
- Android 中的单元测试(使用AndroidTestCase 进行 Content Provider 测试)
- android 怎么进行调试程序 如何采用AndroidTestCase进行单元测试
- 通过AndroidTestCase来进行android 单元测试 part I
- 智能手机超智能 心理学领域帮大忙
- AIX 6.1 两日学习偶记
- 谈谈ActionScript垃圾回收(上)
- 谈谈ActionScript垃圾回收(下)
- 智能指针
- Android[中级教程]第四章 单元测试AndroidTestCase
- 【DMA模式2联想到的磁盘坏道】终于CHKDSK解决了!
- Flex的事件(一)
- 深入理解Flash的沙箱 – Application Domains
- C++ :: 的用法小结
- SharpZipLib Zip操作类库 压缩解压
- 通过COM技术实现Windows Shell编程
- mac 苹果如何才能实现剪切文件
- 20111004 &大前沿