如何在Android Instrumentation测试中强制更改方向?

时间:2010-08-18 19:37:19

标签: android testing instrumentation screen-orientation uiinterfaceorientation

我正在使用ActivityInstrumentationTestCase2类为应用程序编写一些验收测试。我想在测试中引起方向更改,以确保发生许多事情。其中包括确保保留Activity状态,同时我还要确保使用适当的方向布局。

我知道我可以简单地测试onSaveInstanceState / onRestoreInstanceState / onPause / onResume / etc。确保保留实例状态的方法。但是,我想知道是否存在导致方向更改事件的机制?

这是否会涉及注入某种运动事件以诱骗设备/仿真器认为它已被旋转,或者是否存在由Instrumentation提供的实际方法?

谢谢&干杯!

3 个答案:

答案 0 :(得分:48)

实际上你根本不需要使用Robotium。事实上,如果您在调用

时查看Robotium的来源
solo.setActivityOrientation(Solo.LANDSCAPE);

myActivity = this.getActivity(); // In your setUp method()

...

myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

答案 1 :(得分:5)

正如AndrewKS所写,你可以使用

getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
assertTrue(...);

请求更改方向。但是旋转本身是异步执行的。要在方向更改后真正测试状态,您需要在请求后等待一小段时间:

getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Thread.sleep(50); // depends on performance of the testing device/emulator
assertTrue(...);

答案 2 :(得分:3)

使用Robotium。 有一个名为Solo的类,使用它可以通过调用方法来改变方向:

solo.setActivityOrientation(Solo.LANDSCAPE);

就是这样!你的方向会改变。 您可以谷歌Robotium并获取其jar并将其添加到您的测试项目。 Robotium网站还在Android的记事本应用程序(可作为Android SDK示例项目)上提供示例测试项目,该项目显示了它的强大程度以及它的使用方式。