如何使用Active Android与内存数据库一起使用Robolectric进行单元测试?

der*_*ekv 8 android unit-testing robolectric activeandroid

正如标题所说.我知道robolectric提供的内存数据库有限.有没有办法在Active Android中使用它?在默认配置下,似乎在运行所有测试后清除数据库,但不是每个测试都清除.

Dan*_*iel 5

我用greenDao - 但原理是一样的.

我的Application类初始化我的DB(DB有一个名字).对于我的测试,我将子类化为Application(允许Robolectric调用此版本)并覆盖获取DB名称的方法 - 并返回null.这意味着我创建了一个内存DB.由于应用程序创建是setUp的一部分,因此每个测试都使用一个新的内存DB.

public class MyApplication extends android.app.Application {
    @Override
    public void onCreate() { 
        super.onCreate(); 
        initialiseDB(getDatabaseName()); 
    } 

    protected String getDatabaseName() { 
        return "regular-db-name"; 
    }

    private void initialiseDB(String dbName) {
        // DB initialization

        // one example would be:
        Configuration.Builder builder = new Configuration.Builder(this);
        builder.setDatabaseName(dbName);
        ActiveAndroid.initialize(builder.create());
    }
}

public class TestApplication extends MyApplication {
    @Override
    protected String getDatabaseName() { 
        // use fresh in memory db each time 
        return null; 
    } 
}
Run Code Online (Sandbox Code Playgroud)