如何使用带内存数据库的主动Android进行使用Robolectric的单元测试?

如何使用带内存数据库的主动Android进行使用Robolectric的单元测试?,android,unit-testing,robolectric,activeandroid,Android,Unit Testing,Robolectric,Activeandroid,正如标题所说。我知道robolectric提供的内存数据库有限。有什么方法可以在活动Android上使用它吗?在默认配置下,似乎在所有测试运行后都会清除数据库,但不是针对每个测试。我使用greenDao-但原理相同 public class MyApplication extends android.app.Application { @Override public void onCreate() { super.onCreate(); in

正如标题所说。我知道robolectric提供的内存数据库有限。有什么方法可以在活动Android上使用它吗?在默认配置下,似乎在所有测试运行后都会清除数据库,但不是针对每个测试。

我使用greenDao-但原理相同

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; 
    } 
}
我的应用程序类初始化我的数据库(数据库有一个名称)。对于我的测试,我对应用程序进行了子类化(允许Robolectric调用这个版本),并重写了获取DB名称的方法,并返回null。这意味着我创建了一个内存中的数据库。由于应用程序创建是设置的一部分,因此每个测试都使用一个新的内存中数据库

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; 
    } 
}

如果不扩展ActiveAndroid应用程序对象,请不要忘记在测试应用程序类的
onTerminate()
中调用
ActiveAndroid.dispose()