频道栏目
首页 > 资讯 > Android > 正文

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

11-10-04        来源:[db:作者]  
收藏   我要投稿

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

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

摘自:kangkangz4的专栏

 

相关TAG标签
上一篇:关于PowerDesigner导出SQLServer 2008表结构的问题
下一篇:Android[中级教程]第三章 数据存储之SQLite
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站