如何对作用于Accelerometer的Android Activity进行单元测试?

Cor*_*old 5 android unit-testing accelerometer

我从一个基于ShakeActivity的Activity开始,我想为它编写一些单元测试.我之前已经为Android活动编写过一些小的单元测试,但我不知道从哪里开始.我想为加速度计提供一些不同的值,并测试活动如何响应它.现在我保持简单,只是在发生"摇动"事件时更新私有的int计数器变量和TextView.

所以我的问题很大程度上归结为:

如何从单元测试中将假数据发送到加速度计?

Cor*_*old 5

我对此的解决方案最终比我预期的更简单.我没有真正测试加速度计,因为我正在测试应用程序对加速度计引发的事件的响应,我只需要进行相应的测试.我的类实现了SensorListener,我想测试onSensorChanged会发生什么.接下来的关键是输入一些值并检查我的Activity的状态.例:

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);
}
Run Code Online (Sandbox Code Playgroud)