使用Robolectric隐藏TimeZone.getDefault

时间:2014-02-06 09:45:57

标签: android robolectric

由于我的AppTest.class没有在ShadowTimeZone.class中使用我的静态阴影mwod,因此使用Robolectric来掩饰TimeZone.getDefault()时遇到了一些麻烦。

AppTest.class

@RunWith(RobolectricTestRunner.class)
@Config(manifest = "../App/AndroidManifest.xml")
public class AppTest{

    @Test
    @Config(shadows = {ShadowTimeZone.class})
    public void testTimeZone() {    
        String expectedTimeZoneId = "Europe/London";

        TimeZone timeZone = TimeZone.getDefault();

        assertThat(timeZone.getID(), equalTo(expectedTimeZoneId));
    }
}

ShadowTimeZone.class

@Implements(TimeZone.class)
public class ShadowTimeZone {

    @Implementation
    public static TimeZone getDefault() {
        return TimeZone.getTimeZone("Europe/London");
    }
}

2 个答案:

答案 0 :(得分:2)

您根本不需要使用阴影。在测试之前或TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"))设置方法中使用@Before

如果您仍想使用阴影,则getDefault的实际签名为public static synchronized,因此您可能需要将synchronized添加到阴影方法中才能匹配。

答案 1 :(得分:0)

默认情况下,您只能从android包中影子类。但是您可以添加更多类来处理阴影。见https://stackoverflow.com/a/29641926/3619179