使用Robolectric覆盖TimeZone.getDefault的功能

4

我在使用Robolectric时遇到了一些问题,无法正确模拟TimeZone.getDefault(),因为我的AppTest.class没有使用ShadowTimeZone.class中的静态影子方法。

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个回答

5
您无需使用阴影。在您的测试或@ Before 设置方法中使用 TimeZone.setDefault(TimeZone.getTimeZone(“Europe / London”))

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


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接