How can I use Active Android with an in memory database for unit tests using Robolectric?
Asked Answered
R

1

8

As the title says. I am aware that there is a limited in memory database provided in robolectric. Is there any way to use this with Active Android? Under the default configuration, it appears that the database is cleared after all the tests are run, but not for each test.

Renounce answered 30/10, 2013 at 18:17 Comment(0)
D
5

I use greenDao - but the principle is the same.

My Application class initialises my DB (the DB has a name). For my tests I subclass Application (which allows Robolectric to call this version instead) and override the method that gets the DB name - and return null. This then means I create an in memory DB. As the Application creation is part of setUp then a new in memory DB is used for each test.

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; 
    } 
}
Dremadremann answered 12/3, 2014 at 12:36 Comment(1)
Don't forget to call ActiveAndroid.dispose() in onTerminate() of your test application class if you're not extending the ActiveAndroid application object.Mcclean

© 2022 - 2024 — McMap. All rights reserved.