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

 相信很多同学都会有操作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

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

Android[中级教程]第四章 单元测试AndroidTestCase_第1张图片

你可能感兴趣的:(android,String,单元测试,测试,table,null)