设为首页 收藏本站
查看: 1228|回复: 0

[经验分享] android 单元测试, 以sqlite测试为例

[复制链接]

尚未签到

发表于 2016-11-30 10:34:42 | 显示全部楼层 |阅读模式
Android测试,测试activity,使用InstrumentationTestCase类
测试后台逻辑,使用 AndroidTestCase 类
Android单元测试,主要目的是为了保证复杂逻辑是否正常正确,以及依据TDD的原则,测试先于编码,理清代码编写的思路。
主要以AndroidTestCase类测试复杂逻辑来讲解:
以android sqlite数据库逻辑代码的测试为例。
数据库逻辑代码:

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;
import com.android.hanhan.R;
public class DatabaseService {
private DatabaseHelper dbOpenHelper;
protected static final String TBL_NAME = "article";
protected static final String FIELD_ID = "id";
protected static final String FIELD_TITLE = "title";
protected static final String FIELD_CONTENT = "content";
protected static final String FIELD_DELETE = "deleted";
protected static final String FIELD_PUBLISHDATE = "publishdate";
protected static final String FIELD_FAVORITE = "favorite";
protected static final String FIELD_CLICKCOUNT = "clickcount";
protected static final String FIELD_FAVORITEDATE = "favoritedate";
//构造器,初始数据库服务
public DatabaseService(Context context) {
dbOpenHelper = new DatabaseHelper(context);
}
// 删除表
public void dropTable(String taleName) {
dbOpenHelper.getWritableDatabase().execSQL(
"DROP TABLE IF EXISTS " + taleName);
}
// 关闭数据库
public void closeDB() {
dbOpenHelper.getWritableDatabase().close();
}
// 取得数据库TBL_NAME 表的所有数据
public List<Map<String, Object>> fetchALLArticle() {
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Cursor cur = db.query(TBL_NAME, new String[] {FIELD_ID, FIELD_TITLE, FIELD_CONTENT,
FIELD_PUBLISHDATE,FIELD_FAVORITE ,FIELD_DELETE }, null, null, null,
null, null);
list = getListFromDb(list, cur);
return list;
}
// 取得数据库TBL_NAME表的数据个数
public long getPageCount(){
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
return DatabaseUtils.queryNumEntries(db, TBL_NAME);
}
// 根据分页尺寸和页数,取得数据列表
public  List<Map<String, Object>> fetchCustomArticle(long pageSize, long pageID) {
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
String sql = "select * from " + TBL_NAME +     
" Limit "+String.valueOf((pageID-1)*pageSize)+" ,"+String.valueOf((pageID)*pageSize);
Cursor cur = db.rawQuery(sql, null);
list = getListFromDb(list, cur);
return list;
}
//取得数据列表方法
private List<Map<String, Object>>  getListFromDb(List<Map<String, Object>> list, Cursor cur) {
if(cur.moveToFirst()){
do{
Map<String, Object> map = new HashMap<String, Object>();
map = addValueToMap(cur);
list.add(map);
}while(cur.moveToNext());
}
return list;
}
// 将数据映射到map
private Map<String, Object> addValueToMap(Cursor cur) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", cur.getString(cur.getColumnIndex(FIELD_ID)));
map.put("title", cur.getString(cur.getColumnIndex(FIELD_TITLE)));
map.put("info", cur.getString(cur.getColumnIndex(FIELD_PUBLISHDATE)));
map.put("content", cur.getString(cur.getColumnIndex(FIELD_CONTENT)));
map.put("publishdate", cur.getString(cur.getColumnIndex(FIELD_PUBLISHDATE)));
map.put("favorite", cur.getString(cur.getColumnIndex(FIELD_FAVORITE)));
map.put("delete", cur.getString(cur.getColumnIndex(FIELD_DELETE)));
map.put("img", R.drawable.stop);
return map;
}
}


数据库单元测试代码,测试数据取得所有数据方法和 getPageCount()方法

import android.test.AndroidTestCase;
import com.android.hanhan.util.DatabaseService;
public class DatabaseServiceTest extends AndroidTestCase{
private DatabaseService dbs;
@Override
protected void setUp() throws Exception {
dbs = new DatabaseService(getContext());
}
@Override
protected void tearDown() throws Exception {
dbs.closeDB();
}
public void testPageCount() throws Exception{
assertEquals(12, dbs.getPageCount());
}
public void testFetchALLArticle() throws Exception{
assertEquals(12, dbs.fetchALLArticle().size());
}
}


如果为绿色,则通过;红色,表示不通过
如出错,android junit test会有详细的错误信息,方便更正,更能确保程序的健壮
当然需要配置AndroidManifest.xml 文件

<!-- android 单元测试需要添加的内容  -->
<uses-library android:name="android.test.runner" />
<instrumentation android:targetPackage="com.android.abc"  
android:label="Test Sqlite" android:name="android.test.InstrumentationTestRunner">
</instrumentation>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-307614-1-1.html 上篇帖子: SQLite 数据库,sql语言初探 下篇帖子: sqlite所支持的数据类型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表