Я запускаю с Действия, базирующегося прочь этого ShakeActivity, и я хочу записать некоторые модульные тесты на него. Я записал некоторые маленькие модульные тесты на операции Android прежде, но я не уверен, где запустить здесь. Я хочу подать акселерометр некоторые различные значения и протестировать, как действие отвечает на него. На данный момент я сохраняю это простым и просто обновляю частную международную переменную счетчика и TextView, когда случай "встряски" происходит.
Таким образом, мой вопрос в основном сводится к этому:
Как я могу отправить поддельные данные на акселерометр от модульного теста?
Мое решение этой проблемы оказалось намного проще, чем я ожидал. На самом деле я не столько тестирую акселерометр, сколько тестирую реакцию приложения на событие, вызванное акселерометром, и мне просто нужно было провести соответствующее тестирование. Мой класс реализует 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);
}
Как я могу отправить фальшивые данные на акселерометр из модульного теста?
Ага, вы не можете.
Пусть ваша логика шейкер принимает подключаемый источник данных. В модульном тесте предоставьте макет. При производстве поставляйте обертку вокруг акселерометра.
Или не беспокойтесь о модульном тестировании самого шейкера, а лучше беспокойтесь о модульном тестировании вещей, которые используют шейкер, и создайте имитацию шейкера.
Ну, вы можете написать интерфейс.
interface IAccelerometerReader {
public float[] readAccelerometer();
}
Запись AndroidAccelerometerReader
и FakeAccelerometerReader
. Ваш код будет использовать IAccelerometerReader
, но вы можете поменять местами считыватели Android или Fake.