8

タイトルの通りです。Robolectric で提供されるメモリ データベースには制限があることを認識しています。これを Active Android で使用する方法はありますか? デフォルトの構成では、すべてのテストが実行された後にデータベースがクリアされるように見えますが、テストごとではありません。

4

1 に答える 1

5

私は greenDao を使用していますが、原則は同じです。

私の Application クラスは私の DB を初期化します (DB には名前があります)。私のテストでは、Application をサブクラス化し (Robolectric が代わりにこのバージョンを呼び出せるようにします)、DB 名を取得するメソッドをオーバーライドし、null を返します。これは、インメモリ DB を作成することを意味します。アプリケーションの作成はセットアップの一部であるため、テストごとに新しいインメモリ 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; 
    } 
}
于 2014-03-12T12:36:01.057 に答える