我想测试以下所有可能组合的Android行为"输入":
setRequestedOrientation()
(15 possible values, not including SCREEN_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 :使用Android模拟器,脚本按下"逆时针旋转"和 "顺时针旋转"在主机上使用交互式自动化工具的按钮(例如applescript / autohotkey / xdotool)。
还有其他想法吗?
答案 0 :(得分:1)
事实证明这实际上是以下优秀问题的重复: How can i simulate accelerometer in android emulator? 来自@ user1302884的excellent answer: 不幸的是,这个问题没有得到尊重,并且被关闭为主题(?!)所以我不会将其标记为副本。
但这里的答案是:不需要使用applescript / autohotkey / xdotool来驱动模拟器的ui; 相反,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
如果模拟显示器在响应中显示旋转了指定的度数,那将是很好的,但你不能拥有一切。