4

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

我不想为测试创建单独的数据库。Instend of it 我想使用模拟。

此致

4

2 回答 2

4

以防万一其他人偶然发现这篇文章。我遇到的问题是您需要一个 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());
    }
}

希望能帮助到你

于 2012-09-26T07:15:55.707 回答
3

我使用 Robolectric 对 Android 应用程序进行单元测试。适用于 RoboGuice 和 Ormlite。Robolectric 创建自己的数据库,因此单元测试不会修改您正在测试的设备上的数据库。

如果这不能回答您的问题,请澄清您的问题。像,如何不使用与使用 mock dao 相关的单独数据库?

于 2012-04-21T18:37:27.363 回答