Android Robolectric:我如何设置希望Calendar类返回的时间?
我已经开始使用单元测试,但仍然不知道如何测试某些东西。我的应用程序有一个方法,可以接收2个参数,即场馆的开放时间和关闭时间,如果场馆在当前时间开放,则返回true,否则返回false。该方法在内部使用Android Robolectric:我如何设置希望Calendar类返回的时间?,android,unit-testing,mocking,robolectric,Android,Unit Testing,Mocking,Robolectric,我已经开始使用单元测试,但仍然不知道如何测试某些东西。我的应用程序有一个方法,可以接收2个参数,即场馆的开放时间和关闭时间,如果场馆在当前时间开放,则返回true,否则返回false。该方法在内部使用Calendar c=Calendar.getInstance()以获取当前时间。为了正确地测试该方法,我希望Calendar类返回的设置时间如何?我知道在MicrosoftFakes框架中有一种叫做的东西,它伪造了系统类的返回值。你知道Robolectric框架中有什么类似的技术吗?Robolec
Calendar c=Calendar.getInstance()
以获取当前时间。为了正确地测试该方法,我希望Calendar类返回的设置时间如何?我知道在MicrosoftFakes框架中有一种叫做的东西,它伪造了系统类的返回值。你知道Robolectric框架中有什么类似的技术吗?Robolectric用所谓的影子类替换了一些框架类。这些类通常允许指定它们的行为,以便测试使用原始框架类的代码
在本例中,将调用您正在查找的shadow类,该类有一个setCurrentTimeMillis(),您可以使用它来指定Calendar使用的currentTimeMillis()的返回值
大致如下:
ShadowSystemClock shadowClock = Robolectric.shadowOf(SystemClock.class);
shadowClock.setCurrentTimeMillis(1424369871446); // 18:17:51 UTC Feb 19 2015
应该对你有用
编辑:
现在可以直接访问ShadowSystemClock
的方法,因为它们现在是静态的。设置时间的更新方式为:
ShadowSystemClock.setCurrentTimeMillis(1424369871446); // 18:17:51 UTC Feb 19 2015
正如本期所引述—
上述代码对其他方法的影响显而易见,如:
ShadowSystemClock.currentTimeMillis();
SystemClock.currentThreadTimeMillis();
到目前为止,没有直接的方法来模拟System.currentTimeMillis()的响应,直到上面链接的问题的状态发生变化。我所做的是下一步:
首先,我创建了一个类,它用日期包装交互,如本文所示:
然后我用Mockito模拟了返回今天(Date)的方法:
public void setMockDate(String mockDateString) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date mockDate = sdf.parse(mockDateString);
stub(mockDateProvider.getToday()).toReturn(mockDate);
} catch (ParseException parseException) {
fail("Failure: Unable to parse test date string");
}}
然后可以指定方法将返回的日期
希望对别人有帮助 你找到解决办法了吗?我们遇到了同样的问题。如何在Roboeletric 3.0上使用它?ShadowSystemClock.setCurrentTimeMillis(1424369871446)代码>。所有的方法现在都是静态的。@Edward@KamranAhmed,这对我来说不起作用。我设置了ShadowSystemClock.setCurrentTimeMillis(1424369871446)代码>然后调用Calendar.getInstance().getTimeInMillis()
并返回实时。有人能帮我吗?