2

这是一个失败的测试:

@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);
        }
    }
}

如您所见,我正在调用Activityvisible()上的方法ActivityController并以正确的方式驱动 Activity 生命周期。引用文档:

等等,这是什么可见的()废话?

事实证明,在一个真正的 Android 应用程序中, 直到某个时间之后才 调用anActivity的视图层次结构。在这种情况发生之前,Activity 的视图不会报告为可见。这意味着您无法单击它们(以及其他意外行为)。Activity 的层次结构在 Activity 之后附加到设备或模拟器上的 Window 。Robolectric 并没有对何时应该更新可见性做出假设,而是在编写测​​试时将权力交到开发人员手中。WindowonCreate()onPostResume()

那么什么时候调用呢?每当您与 Activity 中的视图交互时。像这样的方法Robolectric.clickOn()要求视图是可见的并正确附加才能正常工作。你应该visible()在之后打电话create()

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

4

1 回答 1

0

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

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

于 2018-01-19T14:14:59.963 回答