我有一个类实现 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)从传感器管理器获取监听器列表(它是私有(private)的,因此使用反射)
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);
}
关于android - Robolected 传感器事件模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38842971/