由于我的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");
}
}
答案 0 :(得分:2)
您根本不需要使用阴影。在测试之前或TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"))
设置方法中使用@Before
。
如果您仍想使用阴影,则getDefault的实际签名为public static synchronized
,因此您可能需要将synchronized
添加到阴影方法中才能匹配。
答案 1 :(得分:0)
默认情况下,您只能从android包中影子类。但是您可以添加更多类来处理阴影。见https://stackoverflow.com/a/29641926/3619179