Không cần phải thử nghiệm gia tốc của hệ điều hành, chỉ cần kiểm tra logic của riêng bạn mà phản ứng với hệ điều hành - nói cách khác SensorListener
của bạn. Thật không may SensorEvent
là tư nhân và tôi không thể gọi SensorListener.onSensorChanged(SensorEvent event)
trực tiếp, vì vậy phải SensorListener lớp con đầu tiên với lớp của riêng tôi, và gọi phương thức của riêng tôi trực tiếp từ các bài kiểm tra:
public class ShakeDetector implements SensorEventListener {
@Override
public void onSensorChanged(SensorEvent event) {
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
onSensorUpdate(x, y, z);
}
public void onSensorUpdate(float x, float y, float z) {
// do my (testable) logic here
}
}
Sau đó, tôi có thể gọi onSensorUpdated
trực tiếp từ mã thử nghiệm của tôi , mô phỏng việc bắn gia tốc.
private void simulateShake(final float amplitude, int interval, int duration) throws InterruptedException {
final SignInFragment.ShakeDetector shaker = getFragment().getShakeSensorForTesting();
long start = System.currentTimeMillis();
do {
getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
shaker.onSensorUpdate(amplitude, amplitude, amplitude);
}
});
Thread.sleep(interval);
} while (System.currentTimeMillis() - start < duration);
}
Nguồn
2017-04-03 20:34:02
Đó chắc chắn có ý nghĩa và có vẻ là một ý tưởng tốt hơn. Bạn có ví dụ về việc sử dụng "nguồn dữ liệu có thể cắm" như thế này không? –
Câu trả lời này vẫn được cập nhật? Hoặc có một cái gì đó mới ra? – TinyTimZamboni
@TinyTimZamboni: Tôi dường như nhớ lại rằng nhóm Android Tools đang nghiên cứu cách sử dụng thiết bị Android làm đầu vào cảm biến cho trình mô phỏng, nhưng tôi không biết vị trí đó ở đâu.Nếu không, tôi không biết bất kỳ cách nào để cung cấp đầu vào cảm biến giả. – CommonsWare