And*_*der 2 android unit-testing mocking robolectric
我已经开始使用单元测试,但我仍然不知道如何测试某些东西.我的应用程序有一个接收2个参数的方法,即场地的开放和关闭时间,如果场地在当前时间打开则返回true,否则返回false.在内部,该方法用于Calendar c = Calendar.getInstance();获取当前时间.要正确测试该方法,我希望Calendar类返回的设置时间如何?我知道在Microsoft Fakes框架中有一些叫做shims伪造系统类返回值的东西.你知道Robolectric框架中的任何类似技术吗?
小智 5
Robolectric用一些所谓的影子类取代了一些框架类.这些类通常允许指定它们的行为,以便测试使用原始框架类的代码.
在这种情况下,您要查找的影子类称为ShadowSystemClock,它具有setCurrentTimeMillis(),您可以使用它来指定Calendar使用的currentTimeMillis()的返回值.
有点像:
ShadowSystemClock shadowClock = Robolectric.shadowOf(SystemClock.class);
shadowClock.setCurrentTimeMillis(1424369871446); // 18:17:51 UTC Feb 19 2015
Run Code Online (Sandbox Code Playgroud)
应该适合你.
编辑:
现在ShadowSystemClock可以直接访问方法,因为它们现在是静态的.更新的设置时间的方式是:
ShadowSystemClock.setCurrentTimeMillis(1424369871446); // 18:17:51 UTC Feb 19 2015
Run Code Online (Sandbox Code Playgroud)
正如本期引用的那样 - 在Robolectric中没有拦截对java.lang.System的调用
上述代码的效果在其他方法上很明显,例如:
ShadowSystemClock.currentTimeMillis();
SystemClock.currentThreadTimeMillis();
Run Code Online (Sandbox Code Playgroud)
截至目前,在System.currentTimeMillis()上述链接问题的状态发生变化之前,没有简单的方法来模拟响应.
| 归档时间: |
|
| 查看次数: |
2288 次 |
| 最近记录: |