如何使用ormlite项目测试android

时间:2011-11-20 11:43:26

标签: android junit ormlite

任何人都可以帮我解决这个问题:如何测试使用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);
    }

我不想为测试创建单独的数据库。我想要使​​用模拟器。

祝你好运

2 个答案:

答案 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());
    }
}

希望有所帮助