这是一个失败的测试:
@RunWith(RobolectricTestRunner.class)
public class FailTest {
@Test
public void heightAndWidth_shouldNotBeZero() {
TestActivity testActivity = Robolectric.buildActivity(TestActivity.class).create().resume().visible().get();
View contentView = testActivity.findViewById(69);
Assertions.assertThat(contentView.getWidth()).isNotZero();
Assertions.assertThat(contentView.getHeight()).isNotZero();
}
private static class TestActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout contentView = new LinearLayout(this);
contentView.setId(69);
contentView.setLayoutParams(new LayoutParams(666, 666));
setContentView(contentView);
}
}
}
正如您所看到的,我正在以visible()
和driving the Activity lifecycle正确的方式调用ActivityController
方法。引用文档:
等等,这是什么可见()废话?
原来,在一个真正的Android应用程序中,一个视图层次结构 在
Activity
之后某个时间Window
未附加onCreate()
叫做。在此之前,活动的视图不会报告为 可见。这意味着你不能点击它们(除了其他意外之外) 行为)。活动的层次结构附加到窗口上 活动onPostResume()
之后的设备或模拟器。而不是 假设何时应该更新可见性, Robolectric在写作时将力量放在开发人员手中 测试所以你什么时候打电话给它?每当您与视图交互时 在活动中。像
Robolectric.clickOn()
这样的方法需要这样做 视图是可见的并且正确连接以便起作用。您 应在visible()
之后致电create()
。
好像我正在做我需要做的一切。那我为什么没有高度/宽度?
答案 0 :(得分:0)
Robolectric中没有布局传递,因此视图尺寸始终为零。