如何测试/锻炼android的屏幕旋转行为?
我想测试上的下面的 “输入” 的所有可能组合机器人的行为:如何测试/锻炼android的屏幕旋转行为?
- 顶部活动的
setRequestedOrientation()
(15 possible values, not includingSCREEN_ORIENTATION_BEHIND
) -
Settings.System.ACCELEROMETER_ROTATION
(2个可能值) -
Settings.System.USER_ROTATION
(4个可能值) - 装置的物理取向(由
OrientationEventListener
可查询)(4个可能的象限)
具体而言,我希望看到的投入如何影响下面的“输出”:
-
getWindowManager().getDefaultDisplay()
.getRotation()
(4个可能值)
因此,这将需要测试至少所有15*2*4*4=480
可能的输入状态。
另外,由于旋转行为通常是依赖于历史的输入(不仅仅是当前输入值) , 我想测试(至少)从一个输入状态的所有可能的转换到一个“相邻”输入状态,即 ,即与一个输入参数不同于给定输入状态的输入状态。 这样的输入的状态转换的数量是:
(number of input states) * (number of states adjacent to a given input state) = (15*2*4*4) * ((15-1) + (2-1) + (4-1) + (4-1)) = 480 * 21 = 10080
此外,有时输出取决于前一个输出,以及以前和当前 输入(例如SCREEN_ORIENTATION_LOCKED
,SCREEN_ORIENTATION_SENSOR_LANDSCAPE
)。 对于给定的输入状态可能的输出的数量可以是1和4之间, 所以这乘以必须由最多4个被测试的转变的数目:
10080 * 4 = 40320
这是一个很大的转变来测试,所以测试必须是编程/脚本。 四个输入参数中的三个直接用于编程控制;不直接控制的是设备的物理方向。
那么,怎么会去编写脚本呢?我可以想到以下方法。
方法#1:具有用于测试的持续时间的脚本化模拟加速度计 更换(物理或模拟)设备中的加速度计。但是,如果我理解正确,模拟加速度计不适用于android。
方法2:使用机器人仿真器,和脚本按压的“逆时针旋转”和 “顺时针旋转”使用在主机上的交互的自动化工具(例如AppleScript的/ AutoHotkey的/ xdotool)的按钮。
还有其他想法吗?
事实证明,这实际上是以下优良问题的重复: How can i simulate accelerometer in android emulator? 具有这种excellent answer从@ user1302884:(?!) 不幸的是,这个问题没有得到尊重,被关闭的题外话,所以我不会将此标记为重复。
但这里的答案是:没有必要的AppleScript/AutoHotkey的/ xdotool驾驶仿真器的用户界面; 而是telnet到模拟器,并告诉它你想要的方向“向上”是。
telnet localhost 5554 # or whatever the port is
telnet> sensor # to get help on the sensor command
telnet> sensor get acceleration
acceleration = 0:9.81:0 # if in natural orientation
telnet> sensor get acceleration
acceleration = -9.81:0:0 # if rotated 90 degrees CW from natural orientation
telnet> sensor set orientation -1:1:0 # to set to 45 degrees CW from natural orientation
这将是很好,如果仿真显示将出现旋转指定的度数作为响应,但你不能拥有一切。