所以我有一个测试,我已经设置了标签的值,通过了。旋转后我发现标签是空白的,所以我进行了单元测试。问题是单元测试失败了,即使我发现标签为空白的原因,它也不再是空白。在轮换之后,由于某种原因,按ID访问TextView不再有效,它将返回null。
@MediumTest
public void testThatLabelsRestoredAfterSwitchingToLandscape(){
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
getInstrumentation().waitForIdleSync();
assertThat(textFor(R.id.location), is("Los Angeles"));
}
textFor方法只进行空检查,但这里是:
private String textFor(int id) {
TextView text = (TextView) getActivity().findViewById(id);
return text != null && text.getText() != null ? text.getText().toString() : null;
}
text为null。
另一个不是超级惊人的细节:如果设备处于横向模式,则测试通过。
另外,我在旋转后在测试中插入了一个睡眠,你可以看到带有目标值的控件。
答案 0 :(得分:2)
我遇到了类似的问题,其中getActivity()在布局更改时返回对已销毁的Activity的引用。如果使用Robotium solo.getCurrentActivity(),它可以正常工作。