我想测试上的下面的 “输入” 的所有可能组合机器人的行为:如何测试/锻炼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)的按钮。
还有其他想法吗?