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

问题描述 投票:4回答:1

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

我的问题是,如何控制这个模拟,我可以控制返回的内容吗?如果是这样的话?

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

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

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

android unit-testing mocking robolectric
1个回答
5
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.