4

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

我的问题真的是,我怎样才能控制这个模拟,我可以控制将返回什么?如果有怎么办?

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

我一直在搜索文档,但我找不到任何东西来确认我在问什么。

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

4

1 回答 1

5

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(..). 底线是,确保测试中的实例与正在测试的代码使用的实例相同。

于 2012-08-20T09:47:11.860 回答