27

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

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

这是否涉及注入某种运动事件以诱使设备/模拟器认为它已被旋转,或者仪器是否提供了一种实际的方法?

谢谢和干杯!

4

3 回答 3

51

您实际上根本不必为此使用 Robotium。事实上,如果你查看 Robotium 的源代码,它在你调用时所做的一切

solo.setActivityOrientation(Solo.LANDSCAPE);

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

...

myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
于 2011-06-01T19:20:34.847 回答
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(...);
于 2011-11-18T10:33:24.290 回答
3

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

solo.setActivityOrientation(Solo.LANDSCAPE);

就是这样!你的方向会改变。您可以 google Robotium 并获取它的 jar 并将其添加到您的测试项目中。Robotium 网站还提供了一个关于 Android 记事本应用程序的示例测试项目(可作为 Android SDK 的示例项目使用),它显示了它的强大功能和使用方便性。

于 2010-12-30T11:56:15.103 回答