为什么内容的高度和宽度在Robolectric中为零?

时间:2013-11-07 06:35:27

标签: android-layout robolectric activity-lifecycle

这是一个失败的测试:

@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()

好像我正在做我需要做的一切。那我为什么没有高度/宽度?​​

1 个答案:

答案 0 :(得分:0)

Robolectric中没有布局传递,因此视图尺寸始终为零。

https://github.com/robolectric/robolectric/issues/819