YuiHatano —— 轻量级Android DAO单元测试框架

网友投稿 1934 2022-10-24

YuiHatano —— 轻量级Android DAO单元测试框架

YuiHatano —— 轻量级Android DAO单元测试框架

YuiHatano介绍

YuiHatano是一款轻量级DAO单元测试框架,开发者可以通过此框架,在Android Studio运行SQLiteDatabase、SharedPreference单元测试。

YuiHatano支持原生SQLiteDatabase操作及GreenDAO、Afinal、XUtils、DbFlow第三方库。

引用

在module的build.gradle添加依赖:

dependencies { testImplementation('net.yui:YuiHatano:1.1.8') { exclude group: 'com.android.support' }}

配置

使用方法

SQLiteDatabase

public class SQLiteDatabaseTest extends YuiCase { SQLiteDatabase db; @Before public void setUp() throws Exception { // 使用YuiHatano提供的Context,获取SQLiteDatabase实例 db = getContext().openOrCreateDatabase("build/test.db", 0, null); } @Test public void testCreateTable() { String sql = "CREATE TABLE person (id INTEGER, name VARCHAR)"; db.execSQL(sql); }}

GreenDAO

GreenDAO github

User:

@Entitypublic class User { // 不能用int @Id(autoincrement = true) private Long id; @Unique private int uid; private String name; public User(int uid, String name) { this.uid = uid; this.name = name; }}

单元测试:

public class GreenDAOTest extends GreenDAOCase { private DaoSession mDaoSession; private UserDao mUserDAO; @BeforeClass public static void beforeClass() { DebugHook.setDebug(true); } @Before public void setUp() throws Exception { Context context = getContext(); // 创建数据库 build/test.db,数据库名就是路径 DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "test.db", null); // 获取可写数据库 SQLiteDatabase db = helper.getWritableDatabase(); // 获取数据库对象 DaoMaster daoMaster = new DaoMaster(db); // 获取Dao对象管理者 mDaoSession = daoMaster.newSession(); mUserDAO = mDaoSession.getUserDao(); } @Test public void testInsert() { User user = new User(uid, name); mUserDAO.insert(user); List users = mUserDAO.loadAll(); Assert.assertEquals(1, users.size()); Assert.assertEquals(1, users.get(0).getUid()); Assert.assertEquals("kk1", users.get(0).getName()); }}

AFinal

AFinal Github

单元测试:

public class AfinalTest extends AFinalCase { FinalDb finalDb; @Before public void setUp() throws Exception { Context context = getContext(); finalDb = FinalDb.create(context, false); } @Test public void testSave() { Bean bean = new Bean(uid, name); finalDb.save(bean); List beanRS = finalDb.findAll(Bean.class); Bean b = beanRS.get(0); Assert.assertEquals("kkmike999", b.getName()); }}

XUtils

XUtils3 Github

@Table(name = "Parent")public class Parent { @Column(name = "ID", isId = true, autoGen = true) int id; @Column(name = "name") String name;}

单元测试:

public class XUtilsTest extends XUtilsCase { protected DbManager db; @Before public void setUp() throws Exception { x.Ext.setDebug(true); // 是否输出debug日志, 开启debug会影响性能. // 本地数据的初始化 DbManager.DaoConfig daoConfig = new DbManager.DaoConfig().setDbName("xutils3_db") //设置数据库名 // 设置数据库版本,每次启动应用时将会检查该版本号, // 发现数据库版本低于这里设置的值将进行数据库升级并触发DbUpgradeListener .setDbVersion(1) // // .setDbDir(new File("build/db"))//设置数据库.db文件存放的目录,默认为包名下databases目录下 .setAllowTransaction(true)//设置是否开启事务,默认为false关闭事务 .setTableCreateListener(new DbManager.TableCreateListener() { @Override public void onTableCreated(DbManager db, TableEntity table) { } })//设置数据库创建时的Listener .setDbUpgradeListener(new DbManager.DbUpgradeListener() { @Override public void onUpgrade(DbManager db, int oldVersion, int newVersion) { //balabala... } });//设置数据库升级时的Listener,这里可以执行相关数据库表的相关修改,比如alter语句增加字段等 db = x.getDb(daoConfig); } @Test public void testSave() throws DbException { Parent parent = new Parent("name0"); db.save(parent); Parent parent = db.selector(Parent.class) .where("name", "LIKE", "name0") .findFirst(); Assert.assertEquals("name0", parent.getName()); }}

DbFlow

DbFlow gradle配置,自行查阅:DbFlow中文教程。

@Table(database = DBFlowDatabase.class)public class UserModel extends BaseModel { //自增ID @Column @PrimaryKey(autoincrement = true) public Long id; @Column public String name; @Column public int sex; public String getName() { return name; } public int getSex() { return sex; }}

单元测试:

public class DbFlowTest extends DbFlowCase { @Before public void setUp() throws Exception { Assert.assertEquals(0, new Select(Method.count()).from(UserModel.class).count()); } @Test public void onInsert() { UserModel people = new UserModel(); people.name = "张三"; people.sex = 1; people.save();// 添加对象,一条一条保存 Assert.assertEquals(1, new Select(Method.count()).from(UserModel.class).count()); }}

Native方法测试

(目前仅支持MacOS,并且测试的module有cpp源文件,MacOS上还需要安装gcc)

示例目录结构:

./app/└── src ├── main │   ├── cpp │   │   ├── CMakeLists.txt │   │   └── jni.cpp │   ├── java │   │   └── net │   │   └── yui │   │   └── app │   │   ├── JNI.java └── test └── java └── net └── yui └── app ├── jni │   └── TestJNI.java

含有native方法的JNI:

public class JNI { public native int add(int a, int b);}

测试用例继承JNICase,其他代码照常:

public class TestJNI extends JNICase { static { System.loadLibrary("jni"); } @Test public void testJNI() { JNI jni = new JNI(); Assert.assertEquals(2, jni.add(1, 1)); }}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:面试官:多个线程执行完毕后,才执行另一个线程,该怎么做?
下一篇:面试官:垃圾回收中GC Root对象有哪几种?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~