Robolectric 传感器事件模拟
Robolectric sensor event simulation
我有一个 class 实现 SensorEventListener 并侦听加速度计事件:
public class MyListener implements SensorEventListener {
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
}
我想使用 Robolectric、
测试 onSensorChanged 方法
关于如何实现这一点有什么想法吗?
1) 获取传感器管理器影子
2) 注册所需的传感器
3) 从传感器管理器获取监听器列表(它是私有的,所以使用反射)
4) 创建 SensorEvent 并触发 onSensorChanged 方法
@Before
public void init() {
SensorManager sensorManager = (SensorManager) RuntimeEnvironment.application.getSystemService(Context.SENSOR_SERVICE);
sensorManagerShadow = shadowOf(sensorManager)
Sensor sensor = Shadow.newInstanceOf(Sensor.class);
sensorManagerShadow.addSensor(Sensor.TYPE_ACCELEROMETER, sensor);
}
@Test
public void myTest() throws Exception {
SensorEvent event = sensorManagerShadow.createSensorEvent();
Field field = ShadowSensorManager.class.getDeclaredField("listeners");
field.setAccessible(true);
List<SensorEventListener> listeners = (List<SensorEventListener>)field.get(this);
listeners.get(0).onSensorChanged(event);
}
我有一个 class 实现 SensorEventListener 并侦听加速度计事件:
public class MyListener implements SensorEventListener {
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
}
我想使用 Robolectric、
测试 onSensorChanged 方法关于如何实现这一点有什么想法吗?
1) 获取传感器管理器影子
2) 注册所需的传感器
3) 从传感器管理器获取监听器列表(它是私有的,所以使用反射)
4) 创建 SensorEvent 并触发 onSensorChanged 方法
@Before
public void init() {
SensorManager sensorManager = (SensorManager) RuntimeEnvironment.application.getSystemService(Context.SENSOR_SERVICE);
sensorManagerShadow = shadowOf(sensorManager)
Sensor sensor = Shadow.newInstanceOf(Sensor.class);
sensorManagerShadow.addSensor(Sensor.TYPE_ACCELEROMETER, sensor);
}
@Test
public void myTest() throws Exception {
SensorEvent event = sensorManagerShadow.createSensorEvent();
Field field = ShadowSensorManager.class.getDeclaredField("listeners");
field.setAccessible(true);
List<SensorEventListener> listeners = (List<SensorEventListener>)field.get(this);
listeners.get(0).onSensorChanged(event);
}