旋转的Android单元测试无法找到控件

时间:2014-04-08 15:09:02

标签: android junit instrumentation

所以我有一个测试,我已经设置了标签的值,通过了。旋转后我发现标签是空白的,所以我进行了单元测试。问题是单元测试失败了,即使我发现标签为空白的原因,它也不再是空白。在轮换之后,由于某种原因,按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。

另一个不是超级惊人的细节:如果设备处于横向模式,则测试通过。

另外,我在旋转后在测试中插入了一个睡眠,你可以看到带有目标值的控件。

1 个答案:

答案 0 :(得分:2)

我遇到了类似的问题,其中getActivity()在布局更改时返回对已销毁的Activity的引用。如果使用Robotium solo.getCurrentActivity(),它可以正常工作。