Android sqlite 单元测试AndroidTestCase

本文介绍了一个用于Android应用中的SQLite数据库操作辅助类及其单元测试方法。包括创建、插入、更新、删除和查询数据等基本操作,并通过测试确保功能正确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

  1. import android.content.Context;  
  2. import android.database.sqlite.SQLiteDatabase;  
  3. import android.database.sqlite.SQLiteOpenHelper;  
  4.   
  5. public class DatabaseHelper extends SQLiteOpenHelper  
  6. {  
  7.     //数据库名称   
  8.     private static final String DB_NAME = "SQLiteDemo.db";  
  9.     //数据库版本   
  10.     private static final int DB_VERSION = 1;  
  11.       
  12.     //表名   
  13.     public static final String TABLE_NAME = "demo";  
  14.       
  15.     private static final String DB_CREATE = "create table " + TABLE_NAME +  " (_id integer primary key autoincrement, name varchar(20), number varchar(10))";  
  16.   
  17.     public DatabaseHelper(Context context)  
  18.     {  
  19.         super(context, DB_NAME, null, DB_VERSION);  
  20.           
  21.     }  
  22.       
  23.     /** 
  24.      * 创建表 
  25.      */  
  26.     @Override  
  27.     public void onCreate(SQLiteDatabase db)  
  28.     {  
  29.         db.execSQL(DB_CREATE);  
  30.   
  31.     }  
  32.   
  33.     /** 
  34.      * 更新表 
  35.      */  
  36.     @Override  
  37.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)  
  38.     {  
  39. //      db.execSQL("drop table if exists " + TABLE_NAME);   
  40. //      onCreate(db);   
  41.   
  42.     }  
  43.   
  44. }  
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

  1. import android.content.ContentValues;  
  2. import android.content.Context;  
  3. import android.database.Cursor;  
  4. import android.database.sqlite.SQLiteDatabase;  
  5.   
  6. public class DatabaseServer  
  7. {  
  8.     private DatabaseHelper dbHelper;  
  9.   
  10.     public DatabaseServer(Context context)  
  11.     {  
  12.         this.dbHelper = new DatabaseHelper(context);  
  13.     }  
  14.   
  15.     /** 
  16.      * 插入数据 
  17.      *  
  18.      * @param name 
  19.      *            名字 
  20.      * @param number 
  21.      *            数据 
  22.      * @return 如果成功则返回true,否则返回false 
  23.      */  
  24.     public boolean insert(String name, String number)  
  25.     {  
  26.         //创建或打开数据库   
  27.         SQLiteDatabase db = dbHelper.getWritableDatabase();  
  28.           
  29.         ContentValues cv = new ContentValues();  
  30.         cv.put("name", name);  
  31.         cv.put("number", number);  
  32.         //插入数据,返回插入数据ID   
  33.         long id = db.insert(dbHelper.TABLE_NAME, null, cv);  
  34.         if (id != 0)  
  35.         {  
  36.             return true;  
  37.         }  
  38.   
  39.         return false;  
  40.     }  
  41.   
  42.     /** 
  43.      * 更新数据 
  44.      *  
  45.      * @param id 
  46.      *            数据列_id 
  47.      * @param number 
  48.      *            数量 
  49.      * @return 如果成功则返回true,否则返回false 
  50.      */  
  51.     public boolean update(int id, String number)  
  52.     {  
  53.   
  54.         SQLiteDatabase db = dbHelper.getWritableDatabase();  
  55.           
  56.         //Android自带的ContetValues,类似于Map,提供了put(String key, XXX value)的方法存入数据   
  57.         ContentValues cv = new ContentValues();  
  58.         cv.put("number", number);  
  59.           
  60.         //通过ContentValues更新数据表,返回更新的ID值   
  61.         int result = db.update(dbHelper.TABLE_NAME, cv, "_id=?",  
  62.                 new String[] { String.valueOf(id) });  
  63.   
  64.         if (result != 0)  
  65.         {  
  66.             return true;  
  67.         }  
  68.   
  69.         return false;  
  70.     }  
  71.   
  72.     /** 
  73.      * 删除数据 
  74.      *  
  75.      * @param id 
  76.      *            数据列_id 
  77.      * @return 
  78.      */  
  79.     public boolean delete(int id)  
  80.     {  
  81.   
  82.         SQLiteDatabase db = dbHelper.getWritableDatabase();  
  83.           
  84.         //删除指定ID值   
  85.         int result = db.delete(dbHelper.TABLE_NAME, "_id=?",  
  86.                 new String[] { String.valueOf(id) });  
  87.   
  88.         if (result != 0)  
  89.         {  
  90.             return true;  
  91.         }  
  92.   
  93.         return false;  
  94.     }  
  95.   
  96.     /** 
  97.      * 查询数据 
  98.      *  
  99.      * @return 返回数据列表 
  100.      */  
  101.     public Cursor fetchAll()  
  102.     {  
  103.   
  104.         SQLiteDatabase db = dbHelper.getReadableDatabase();  
  105.         //查询数据表中所有字段   
  106.         Cursor cursor = db.query(dbHelper.TABLE_NAME, nullnullnullnull,  
  107.                 null"_id desc");  
  108.         if (cursor != null)  
  109.         {  
  110.             return cursor;  
  111.         }  
  112.         return null;  
  113.   
  114.     }  
  115. }  
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

  1. import android.database.Cursor;  
  2. import android.test.AndroidTestCase;  
  3.   
  4. public class SQLiteDemoTest extends AndroidTestCase  
  5. {  
  6.     private DatabaseServer dbServer;  
  7.       
  8.     /** 
  9.      * 测试插入数据 
  10.      */  
  11.     public void testinsert()  
  12.     {  
  13.         dbServer = new DatabaseServer(this.getContext());  
  14.         boolean flag = dbServer.insert("沙僧""10");  
  15.         System.out.println(flag);  
  16.     }  
  17.       
  18.     /** 
  19.      * 测试查询数据 
  20.      */  
  21.     public void testfetchAll()  
  22.     {  
  23.         dbServer = new DatabaseServer(this.getContext());  
  24.         Cursor cursor = dbServer.fetchAll();  
  25.         while (cursor.moveToNext())  
  26.         {  
  27.             System.out.println(cursor.getString(1));  
  28.             System.out.println(cursor.getString(2));  
  29.         }  
  30.   
  31.     }  
  32.       
  33.     /** 
  34.      * 测试更新数据 
  35.      */  
  36.     public void testupdate()  
  37.     {  
  38.         dbServer = new DatabaseServer(this.getContext());  
  39.         boolean flag = dbServer.update(1"20");  
  40.         System.out.println(flag);  
  41.     }  
  42.       
  43.     /** 
  44.      * 测试删除数据 
  45.      */  
  46.     public void testdelete()  
  47.     {  
  48.         dbServer = new DatabaseServer(this.getContext());  
  49.         boolean flag = dbServer.delete(1);  
  50.         System.out.println(flag);  
  51.     }  
  52. }  
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中还要加入测试库文件

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.kang.button_demo" android:versionCode="1"  
  4.     android:versionName="1.0">  
  5.     <uses-sdk android:minSdkVersion="10" />  
  6.   
  7.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  8.         <uses-library android:name="android.test.runner" />  
  9.         <activity android:label="@string/app_name" android:name=".SQLiteDemo">  
  10.             <intent-filter>  
  11.                 <action android:name="android.intent.action.MAIN" />  
  12.                 <category android:name="android.intent.category.LAUNCHER" />  
  13.             </intent-filter>  
  14.         </activity>  
  15.   
  16.     </application>  
  17.   
  18.     <instrumentation android:name="android.test.InstrumentationTestRunner"  
  19.         android:targetPackage="com.kang.button_demo" android:label="Tests for My App" />  
  20. </manifest>  
<?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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值