2016-05-11 6 views
1

Bei dieser Frage geht es darum, Android-Testfälle unabhängig vom Datum zu machen, wenn sie ausgeführt werden, auch wenn der getestete Inhalt vom Systemdatum des Telefons/Emulators abhängt.So beheben Sie das Datum für einen Android-Espresso-Testfall

Ich möchte in meiner Android App eine Ansicht mit Espresso testen, die vom aktuellen Datum abhängt. Es besteht im Wesentlichen eines Kalender: Ich habe eine ListView mit einer Zeile für jeden Tag und ich kann auf einen Tag klicken, um eine Detailansicht für den Tag zu kommen:

<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"/> 

Aber der interessante Teil für meine Frage ist die 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> 

die Textview Sie dort sehen Sie das Datum des ausgewählten Tages zeigen, zum Beispiel „Mi, 4. Mai '16“. Wenn die Monatsansicht geladen ist, wird natürlich der aktuelle Monat angezeigt. Das macht den Test abhängig vom aktuellen Datum. Als ich

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

die ActionBar wird "Mi, 4. Mai '16", wenn ich Mai 2016 diesen Test laufen, aber "Sat, 4. Jun '16", wenn ich diesen Test laufen in Juni 2016.

Wie kann ich Espresso sagen, das Datum für diesen Test auf einen bestimmten Tag zu fixieren?

+0

Sie können dies nicht durch Espresso tun. Espresso ist nur eine Bibliothek für eigene Tests. Für logische Operationen sollten Sie ein anderes Testframework wie Mockito verwenden. –

Antwort

0

Ich hatte die gleiche Notwendigkeit, eine feste Datumszeit zu verwenden. Meine Lösung bestand darin, eine Wrapper-Klasse zu erstellen, um auf das aktuelle Datum/die aktuelle Uhrzeit zuzugreifen. Diese Klasse ist als Singleton konzipiert und in meinem Test ersetze ich die statische Singleton-Instanz durch eine neue. Dieses neue Gerät ist so konfiguriert, dass es immer das gleiche "aktuelle" Datum/Uhrzeit anzeigt und zu einem neuen Datum/Uhrzeit geändert werden kann.

+0

Wenn Sie Joda Time verwenden (sollten Sie wahrscheinlich), können Sie 'DateTimeUtils # setCurrentMillisOffset()' verwenden –