任何人都可以帮我解决这个问题:如何测试使用ormlite的Android应用程序?
我想知道如何创建dao形式的模拟。这段代码给我一个dao
public Dao<Account, Integer> getAccountDao() throws SQLException {
if (accountDao == null) {
accountDao = getDao(Account.class);
}
return accountDao;
}
我的测试活动看起来像这样:
public class OrmActivity extends OrmLiteBaseActivity<DatabaseHelper> {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initUi();
initUiListeners();
RuntimeExceptionDao<Account, Integer> accountDao = getHelper().getAccountDataDao();
Account account = new Account();
account.setName("name");
account.setPassword("password");
accountDao.create(account);
}
我不想为测试创建单独的数据库。我想要使用模拟器。
祝你好运
答案 0 :(得分:3)
我使用Robolectric进行Android应用的单元测试。适用于RoboGuice和Ormlite。 Robolectric创建自己的数据库,因此单元测试不会修改您正在测试的设备上的数据库。
如果这不能回答您的问题,请澄清您的问题。比如,如何使用与使用mock dao相关的单独数据库?
答案 1 :(得分:3)
以防万一其他人偶然发现这篇文章。我遇到的问题是你需要一个Activity的实例,所以你可以将上下文传递给 OpenHelperManager.getHelper(android.content.Context context,Class openHelperClass)方法。
为了解决这个问题,我创建了一个ActivityInstrumentationTestCase2测试类来提供上下文。你可以使用 MockContext ,但我知道它有问题。这种方式很简单,有点像:)
此时我不打算测试任何Activity功能,只测试数据库功能。
public class TestActivity extends ActivityInstrumentationTestCase2<MainFragment> {
public TestActivity() {
super(MainFragment.class);
}
protected void setUp() throws Exception {
super.setUp();
//DatabaseHelper.class is the extended OrmLiteSqliteOpenHelper class
OpenHelperManager.getHelper(getActivity(), DatabaseHelper.class);
}
protected void tearDown() throws Exception {
OpenHelperManager.releaseHelper();
super.tearDown();
}
public void testDetailDiscount() {
//Example code using an entity class that encapsulates ormlite functionality
double total = 95 * 5;
DocumentDetail detail = DocumentDetail.create(getActivity());
assertEquals(total, detail.getTotal());
}
}
希望有所帮助