Работя върху приложение за Android, което използва OrmLiteSqliteOpenHelper за свързване към SQLite db.
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;
}
}
За да извлека данни от db, имам някои класове на доставчици, те използват някои 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. Идеята ми е да имам макетна база данни.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, който ще използва db в стандартното местоположение на приложението за Android, а не моя локален файл. Как мога да модифицирам кода си за тестовете, така че тестовете да използват локална база данни, добавени като актив или ресурс, без да докосвам истинския код на приложението?