android - Robolectric (Android) : Using ShadowLocationManager ? 是否可配置?

标签 android unit-testing mocking robolectric

到目前为止,我一直非常成功地使用 Robolectric。我有一个获取位置管理器的 Activity 。现在根据文档,robolectric 框架合并了一个名为“ShadowLocationManager”的影子类来制作一种模拟。

我的问题真的是,我如何控制这个模拟,我可以控制返回的内容吗?如果是怎么办?

或者我是否必须创建我的“OWN”影子类并实现“ShadowLocationManager”。

我一直在搜索文档,但找不到任何东西来确认我的要求。

如果 robolectric 确实包含位置管理器的影子,我该如何控制启用哪些提供程序?如果影子类已经存在并且可以配置和控制,我不想实现自己的影子类。

最佳答案

Robolectric 中的影子类是各种 Android 类的替代品,只能根据其实现的功能进行更改。

查看the source for ShadowLocationManager ,你有一些方法可以用来调整假的行为:

    public void setProviderEnabled(String provider, boolean isEnabled);
    public void setProviderEnabled(String provider, boolean isEnabled, List<Criteria> criteria);
    public boolean setBestProvider(String provider, boolean enabled);
    public boolean setBestProvider(String provider, boolean enabled, List<Criteria> criteria);
    public void setLastKnownLocation(String provider, Location location);

您可以通过以下方式获取 LocationManager 的影子实例:

LocationManager instanceOfLocationManager = Robolectric.newInstanceOf(LocationManager.class);
ShadowLocationManager slm = Robolectric.shadowOf(instanceOfLocationManager);

注意:在示例中,我使用 Robolectric 创建 LocationManager 的实例。根据您的测试设置,此实例可能来自您的注入(inject)框架或直接来自调用 Context.getSystemService(..)。底线是,确保测试中的实例与正在测试的代码使用的实例相同。

关于android - Robolectric (Android) : Using ShadowLocationManager ? 是否可配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12034743/

相关文章:

.net - 您如何对内部使用计时器的类进行单元测试?

java - 从 Scratch 对未测试代码执行单元和集成测试的方法

javascript - jamesDBloom mockserver 使用 javascript 进行验证

asp.net-mvc - 用虚拟数据填充 POCO 的最佳方法是什么?

java - 如何在 fragment 中添加后退箭头以进行后退操作?

java - Android NDK_PROJECT_PATH = null

android - 未找到 OpenCV NDK 构建

.net - 单元测试框架 - 主要功能是什么

java - 在 Mockito 中模拟深层对象

java - 从Gson读取Json结果出错