2016-08-09 4 views
1

センサーイベント:これを達成するためにどのようにようRobolectric私はSensorEventListenerを実装し、加速度センサーイベントをリッスンクラス持っシミュレーション

public class MyListener implements SensorEventListener { 
    @Override 
    public void onSensorChanged(SensorEvent sensorEvent) { 

    } 

    @Override 
    public void onAccuracyChanged(Sensor sensor, int i) { 

    } 
} 
私はRobolectricを用いた方法をonSensorChangedテストしたいと思います

任意のアイデアを?

答えて

1

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); 
} 
関連する問題