gpt4 book ai didi

android - 使用 Robolectric 3 和 ORMLite 进行测试时使用本地数据库

转载 作者:行者123 更新时间:2023-12-03 18:12:50 27 4
gpt4 key购买 nike

我正在开发一个使用 OrmLite 连接到 SQLite 数据库的 Android 应用程序。

public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
...

private static final String DATABASE_NAME = "db.sqlite";
private static DatabaseHelper helper = null;

private DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, BuildConfig.DATABASE_VERSION);
}

public static synchronized DatabaseHelper getHelper(Context context) {
if (helper == null) {
helper = new DatabaseHelper(context);
}
return helper;
}
}

为了从数据库中获取数据,我有一些帮助类,它们使用了一些 DAO。
public class AccountsDBHelper {

public List<Account> getAllAccounts(Context context) {

DatabaseHelper dbHelper = DatabaseHelper.getHelper(context);
Dao<Acount, Integer> daoAccounts = dbHelper.getAccountsDao();
...
...
...
}
}

我已经使用 Robolectric 3 来测试我的代码,但我很难理解如何将 Robolectric 与 ORMLite 一起使用。
我的想法是在 Assets 中拥有一个模拟 database.sqlite,其结构与我在生产中的结构相同。
该数据库将预先填充来自测试帐户的数据,并将其用于我的所有测试。
例如,如果我想测试 ProductsProvider 类,我应该这样做:
@RunWith(MyTestRunner.class)
public class AccountsDBHelperTest {

@Test
public void testGetAllAccounts() {
List<Accounts> accounts= AccountsDBHelper.getAllAccounts(getTestContext());
assertNotNull(accounts);
assertFalse(accounts.isEmpty());
}
}

请注意,AccountsDBHelper.getAllAccounts() 将使用 DatabaseHelper,它将使用 Android 应用程序 Assets 中的 db,而不是我的本地生产数据库文件。如何修改我的测试代码,让它们使用作为 Assets 添加的本地数据库?不接触应用程序的真实代码?任何帮助将非常受欢迎,谢谢...

最佳答案

缺少的链接是指向本地数据库的路径String dbPath = RuntimeEnvironment.application.getPackageResourcePath() + DB_FOLDER + dbName;

关于android - 使用 Robolectric 3 和 ORMLite 进行测试时使用本地数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33419011/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com