Android layout 为什么在Robolectric中内容视图的高度和宽度为零?
下面是一个失败的测试:Android layout 为什么在Robolectric中内容视图的高度和宽度为零?,android-layout,robolectric,activity-lifecycle,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(
@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);
}
}
}
如您所见,我正在调用ActivityController
上的visible()
方法,方法正确。引用文件:
等等,这是什么意思?
事实证明,在真正的Android应用程序中
活动
在onCreate()之后的某个时间才会附加到窗口
被称为。在此之前,活动的视图不会报告为
看得见的这意味着你不能点击它们(除其他意外之外)
行为)。“活动”的层次结构附加到“活动”上的窗口
在活动上的onPostResume()
之后安装设备或模拟器。而不是
假设应在何时更新可见性,
Robolectric在编写时将权力交给了开发人员
测试
那你什么时候叫它?当您与视图交互时
活动内部。像Robolectric.clickOn()
这样的方法需要
视图可见并正确附着,以便正常工作。你
应该在create()
之后调用visible()
看来我正在做我需要做的一切。那么为什么我没有得到高度/宽度?在Robolectric中没有布局过程,因此视图尺寸始终为零
可能不相关,但您缺少start()
。