как протестировать Android с помощью проекта ormlite - PullRequest
4 голосов
/ 20 ноября 2011

Кто-нибудь может помочь мне с проблемой: как тестировать приложения для Android, которые используют ormlite?

Я бы хотел знать, как создавать насмешки из Дао. Этот код даёт мне дао

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 ]

3 голосов
/ 26 сентября 2012

На всякий случай, если кто-нибудь еще наткнется на этот пост. У меня была проблема с тем, что вам нужен экземпляр 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());
    }
}

Надеюсь, это поможет

3 голосов
/ 21 апреля 2012

Я использую Robolectric для модульного тестирования приложений Android.Прекрасно работает с RoboGuice и Ormlite.Robolectric создает свою собственную базу данных, поэтому модульный тест не изменяет базу данных на устройстве, с которым вы тестируете.

Если это не отвечает на ваш вопрос, уточните ваш вопрос.Например, как не использовать отдельную базу данных, связанную с использованием mock dao's?

...