2016-05-11 1 views
1

Этот вопрос касается того, чтобы делать тестовые случаи для Android независимо от даты, когда они запускаются, даже если тестируемый контент зависит от системной даты телефона/эмулятора.Как исправить дату для тестового случая Android-Espresso

Я хочу протестировать представление в своем приложении для Android с помощью эспрессо, которое зависит от текущей даты. Это в основном календарь: У меня есть ListView с одной строки на каждый день, и я могу нажать на день, чтобы получить подробный вид на день:

<ListView 
    android:id="@android:id/list" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/toolbar" 
    android:layout_centerVertical="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:headerDividersEnabled="false"/> 

Но интересная часть моего вопроса является ActionBar:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/toolbar" 
    android:minHeight="?attr/actionBarSize" 
    android:background="@color/cp_toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    tools:showIn="@layout/activity_month_time_record"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Toolbar Title" 
    android:layout_gravity="center" 
    android:id="@+id/toolbar_title" 
    style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"/> 

</android.support.v7.widget.Toolbar> 

В текстовом режиме вы увидите, что будет отображаться дата выбранного дня, например «Wed, 4. May '16». Конечно, когда будет загружен месяц, отобразится текущий месяц. Это делает тест в зависимости от текущей даты. Когда я выполняю

onData(anything()).inAdapterView(withId(android.R.id.list)).atPosition(5) 
      .perform(click()); 

ActionBar покажет «Wed, 4. '16 мая», если я запускаю этот тест в мае 2016 года, но «Sat, 4. Июнь '16», если я запускаю этот тест в Июнь 2016.

Так как я могу сказать Espresso, чтобы исправить дату для этого теста на определенный день?

+0

Вы не можете сделать это с помощью эспрессо. Espresso - это только библиотека для тестов ui. Для логических операций вы должны использовать другие платформы тестирования, такие как Mockito. –

ответ

0

У меня было то же самое, что и для фиксированного времени. Моим решением было создать класс-оболочку для доступа к текущей дате/времени. Этот класс разработан как singleton, и в моем тесте я заменяю статический экземпляр singleton новым. Этот новый настроен так, чтобы всегда сообщать о «текущей» дате/времени и может быть изменен на новую дату/время.

+0

Если вы используете Joda Time (вы, вероятно, должны), вы можете использовать 'DateTimeUtils # setCurrentMillisOffset()' –

 Смежные вопросы

  • Нет связанных вопросов^_^