Как может я модульный тест Действие Android, которое действует на Акселерометр?

Я запускаю с Действия, базирующегося прочь этого ShakeActivity, и я хочу записать некоторые модульные тесты на него. Я записал некоторые маленькие модульные тесты на операции Android прежде, но я не уверен, где запустить здесь. Я хочу подать акселерометр некоторые различные значения и протестировать, как действие отвечает на него. На данный момент я сохраняю это простым и просто обновляю частную международную переменную счетчика и TextView, когда случай "встряски" происходит.

Таким образом, мой вопрос в основном сводится к этому:

Как я могу отправить поддельные данные на акселерометр от модульного теста?

5
задан Corey Sunwold 10 May 2010 в 22:49
поделиться

3 ответа

Мое решение этой проблемы оказалось намного проще, чем я ожидал. На самом деле я не столько тестирую акселерометр, сколько тестирую реакцию приложения на событие, вызванное акселерометром, и мне просто нужно было провести соответствующее тестирование. Мой класс реализует SensorListener , и я хотел проверить, что происходит наSensorChanged. Ключевым моментом было ввести некоторые значения и проверить состояние моей активности. Пример:

public void testShake() throws InterruptedException {
    mShaker.onSensorChanged(SensorManager.SENSOR_ACCELEROMETER, new float[] {0, 0, 0} );
    //Required because method only allows one shake per 100ms
    Thread.sleep(500);
    mShaker.onSensorChanged(SensorManager.SENSOR_ACCELEROMETER, new float[] {300, 300, 300});
    Assert.assertTrue("Counter: " + mShaker.shakeCounter, mShaker.shakeCounter > 0);
}
5
ответ дан 13 December 2019 в 22:03
поделиться

Как я могу отправить фальшивые данные на акселерометр из модульного теста?

Ага, вы не можете.

Пусть ваша логика шейкер принимает подключаемый источник данных. В модульном тесте предоставьте макет. При производстве поставляйте обертку вокруг акселерометра.

Или не беспокойтесь о модульном тестировании самого шейкера, а лучше беспокойтесь о модульном тестировании вещей, которые используют шейкер, и создайте имитацию шейкера.

4
ответ дан 13 December 2019 в 22:03
поделиться

Ну, вы можете написать интерфейс.

interface IAccelerometerReader {
    public float[] readAccelerometer();
}

Запись AndroidAccelerometerReader и FakeAccelerometerReader . Ваш код будет использовать IAccelerometerReader , но вы можете поменять местами считыватели Android или Fake.

1
ответ дан 13 December 2019 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: