如何修复Android-Espresso测试用例的日期

时间:2016-05-11 14:24:42

标签: android android-espresso

这个问题是关于让Android测试用例独立于日期,运行时,即使正在测试的内容取决于手机/模拟器的系统日期。

我想在我的Android应用程序中使用Espresso测试视图,这取决于当前日期。它基本上是一个日历:我有一个<?php $img = resize_image('../images/avatar/demo.jpg', 120, 120); ob_start(); imagejpeg($img); $output = base64_encode(ob_get_contents()); ob_end_clean(); ?> <img src="data:image/jpeg;base64,<?= $output; ?>"/> ,每天有一行,我可以点击一天来获取当天的详细信息视图:

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

您看到的TextView将显示所选日期的日期,例如“Wed,4 May '16”。当然,加载月视图时,将显示当前月份。这使得测试取决于当前日期。当我表演时

<?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>
如果我在2016年5月进行此测试,但是“2016年6月4日星期六”,如果我在2016年6月进行此测试,则onData(anything()).inAdapterView(withId(android.R.id.list)).atPosition(5) .perform(click()); 将显示“星期三,4月4日”。

  

那么我如何告诉Espresso将此测试的日期修复到某一天?

1 个答案:

答案 0 :(得分:0)

我有同样的需要使用固定的日期时间。我的解决方案是创建一个包装类来访问当前日期/时间。这个类被设计为单例,在我的测试中,我用一个新的替换静态单例实例。这个新的配置为始终报告相同的“当前”日期/时间,并可以更改为新的日期/时间。