Robolectric(Android):使用ShadowLocationManager?它是可配置的吗



到目前为止,我一直在非常成功地使用Robolectric。我有一个活动得到了位置经理。现在,根据文档,roboelectric框架包含了一个名为"ShadowLocationManager"的影子类来制作一种mock。

我的问题是,我如何控制这个mock,我能控制返回的内容吗?如果是,怎么办?

或者我必须创建我的"OWN"阴影类并实现"ShadowLocationManager"。

我一直在寻找文件,但我找不到任何东西来证实我的要求。

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

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

查看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的实例。根据您的测试设置,此实例可能来自您的注入框架,也可能直接来自调用Context.getSystemService(..)。底线是,确保测试中的实例与正在测试的代码使用的实例相同。

最新更新