您的位置:首页 > 移动开发 > Android开发

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

2011-10-04 00:43 337 查看
 相信很多同学都会有操作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);

}

/**
* 创建表
*/
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL(DB_CREATE);

}

/**
* 更新表
*/
@Override
public 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);
//插入数据,返回插入数据ID
long 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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息