Я работаю над приложением для Android, которое использует OrmLiteSqliteOpenHelper для подключения к базе данных SQLite.
public class MyDatabaseHelper extends OrmLiteSqliteOpenHelper {
...
private static final String DATABASE_NAME = "mydb.sqlite";
private static MyDatabaseHelper helper = null;
private MyDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, BuildConfig.DATABASE_VERSION);
}
public static synchronized MyDatabaseHelper getHelper(Context context) {
if (helper == null) {
helper = new MyDatabaseHelper(context);
}
return helper;
}
}
Для извлечения данных из базы данных у меня есть несколько классов провайдеров, они используют некоторые DAO.
public class ProductsProvider {
public static List<Products> getProducts(Context context) {
MyDatabaseHelper helper = MyDatabaseHelper.getHelper(context);
Dao<Product, String> daoProducts = helperDatabase.getProductDao();
...
...
...
}
}
У меня есть Robolectric для тестирования моего кода, но мне трудно понять, как использовать Robolectric вместе с ORMLite. Моя идея состоит в том, чтобы иметь фиктивный файл database.sqlite, предварительно заполненный той же структурой и данными, которые у меня обычно есть, и использовать его для всех моих тестов. Например, если я хочу протестировать класс ProductsProvider, я должен сделать следующее:
@RunWith(MyTestRunner.class)
public class ProductsProviderTest extends MyTestCase {
@Test
public void testDb() {
List<Products> products = ProductsProvider.getProducts(getTestContext());
assertNotNull(products);
assertFalse(products.isEmpty());
}
}
Обратите внимание, что ProductsProvider.getProducts() будет использовать MyDatabaseHelper, который будет использовать базу данных в стандартном расположении приложения Android, а не в моем локальном файле. Как изменить мой код для тестов, чтобы тесты с использованием локальной базы данных добавлялись в качестве актива или ресурса, не касаясь реального кода приложения?