Android[中級教程]第四章 單元測試AndroidTestCase

來源:互聯網
上載者:User

相信很多同學都會有操作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的專欄

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.