我看到了这个roboletirc示例:
@Test
public void shouldHaveHappySmiles() throws Exception {
String hello = new MainActivity().getResources().getString(R.string.hello_world);
assertThat(hello, equalTo("Hello world!"));
}
@Before
public void setup() {
activity = Robolectric.buildActivity(MainActivity.class)
.create().get();
}
@Test
public void checkActivityNotNull() throws Exception {
assertNotNull(activity);
}
@Test
public void buttonClickShouldStartNewActivity() throws Exception
{
Button button = (Button) activity.findViewById(R.id.button2);
button.performClick();
Intent intent = Robolectric.shadowOf(activity).peekNextStartedActivity();
assertEquals(SecondActivity.class.getCanonicalName(), inten
t.getComponent().getClassName());
}
我试着查看文档,但没有理解createActivity
和shadowOf
之间的区别。有人可以请一些亮点吗?
顺便问一下,为什么这个测试中有new MainActivity().getResources().getString(R.string.hello_world);
?我应该何时使用new
代替createActivity()
?
答案 0 :(得分:0)
Shadows在测试时为实际类提供替代功能。它们有时也会提供它们阴影类中没有的功能,这样您就可以打开和关闭功能,并检查被镜像对象的内部值。
例如:关闭测试类中的Google Analytics(分析)
ShadowApplication shadowApplication =
Robolectric.shadowOf_(Robolectric.application);
shadowApplication.declareActionUnbindable( “com.google.android.gms.analytics.service.START”);
关于阴影: http://robolectric.org/extending/
不要使用“新”使用buildActivity。这使您可以完全控制Activity生命周期,以便在启动周期的每个步骤之后检查Activity上的内容。例如,您可以在不调用onResume的情况下调用get()。
activitySome =
Robolectric.buildActivity(SomeActivity.class).withIntent(intent).create().start().resume().visible().get();
在buildActivity上调用.get()之后,可以在活动类上调用getResources()。