Как вы тестируете приложения GPS в Android? Можем ли мы протестировать его с помощью Android-эмулятора?
Тестирование GPS в Android
Ответ 1
Да.
Если вы разрабатываете с использованием плагина Eclipse ADT, откройте перспективу DDMS после запуска эмулятора и найдите представление управления эмулятором. Существует секция управления местоположением, которая позволяет отправлять фиксированные координаты широты и долготы, или файлы GPX (формат GPS-обмена), или KML (Keyhole Markup Language), если вы хотите регулярно отправлять несколько координат (чтобы имитировать перемещение определенного маршрута).
В качестве альтернативы вы можете просто подключиться к эмулятору и использовать команду geo из командной строки, которая поддерживает фиксированные координаты широты и долготы, а также предложения данных NMEA:
telnet localhost 5554
geo fix -82.411629 28.054553
geo nmea $GPGGA,001431.092,0118.2653,N,10351.1359,E,0,00,,-19.6,M,4.1,M,,0000*5B
Ответ 2
Возможно, вы хотите использовать Unit test, чтобы вы могли попробовать следующее:
public class GPSPollingServiceTest extends AndroidTestCase {
private LocationManager locationManager;
public void testGPS() {
LocationManager locationManager = (LocationManager) this.getContext().getSystemService(Context.LOCATION_SERVICE);
locationManager.addTestProvider("Test", false, false, false, false, false, false, false, Criteria.POWER_LOW, Criteria.ACCURACY_FINE);
locationManager.setTestProviderEnabled("Test", true);
// Set up your test
Location location = new Location("Test");
location.setLatitude(10.0);
location.setLongitude(20.0);
locationManager.setTestProviderLocation("Test", location);
// Check if your listener reacted the right way
locationManager.removeTestProvider("Test");
}
}
Для этого вам также потребуется необходимое разрешение для AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
Ответ 3
Возможно это тестовое приложение или this может помогите вам.
Ответ 4
в дополнение к коду Mallox это сулотион для макета местоположения в дополнение к реальному местоположению gps: TEST_MOCK_GPS_LOCATION - это строка
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = null;
List providers = lm.getAllProviders();
for (Object provider : providers) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
Location loc = lm.getLastKnownLocation((String) provider);
if (provider.equals(TEST_MOCK_GPS_LOCATION)) {
mLastLocation = loc;
}
}
в тестовом классе это:
public class GPSPollingServiceTest extends AndroidTestCase {
private LocationManager locationManager;
public void testGPS() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
LocationManager locationManager = (LocationManager) this.getContext().getSystemService(Context.LOCATION_SERVICE);
List providers = locationManager.getAllProviders();
if(!providers.contains(TEST_MOCK_GPS_LOCATION)) {
locationManager.addTestProvider(TEST_MOCK_GPS_LOCATION, false, false, false, false, false, false, false, Criteria.POWER_LOW, Criteria.ACCURACY_FINE);
locationManager.setTestProviderEnabled(TEST_MOCK_GPS_LOCATION, true);
// Set up your test
Location location = new Location(TEST_MOCK_GPS_LOCATION);
location.setLatitude(34.1233400);
location.setLongitude(15.6777880);
location.setAccuracy(7);
location.setTime(8);
location.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
locationManager.setTestProviderLocation(TEST_MOCK_GPS_LOCATION, location);
Method locationJellyBeanFixMethod = Location.class.getMethod("makeComplete");
if (locationJellyBeanFixMethod != null) {
locationJellyBeanFixMethod.invoke(location);
}
} else {
// Check if your listener reacted the right way
locationManager.removeTestProvider(TEST_MOCK_GPS_LOCATION);
}
}
}
надеюсь, что это поможет вам
Ответ 5
Я предлагаю вам написать тест, который отправляет объект местоположения классу слушателя, который вы хотите проверить. Имея это в виду, вам понадобятся некоторые вспомогательные методы, которые смогут создавать объекты местоположения.
Например:
Сначала вы отправляете местоположение с фиксированными координатами (например, центр Нью-Йорка).
//проверить, все ли в порядке
Затем вы отправляете координату, которая составляет 100 м от первой координаты. Вы можете сделать это с помощью функции, которую я реализовал недавно: fooobar.com/questions/298581/...
//проверить, все ли в порядке
Обычно методы GPS связаны со временем. Я предлагаю вам реализовать метод getNow() в классе слушателя и вызывать его всякий раз, когда вам нужно текущее время.
long getNow() {
if (isUnitTesting) {
return unitTestTime;
} else {
System.getcurrenttimemillis();
}
}
В среде unit test вы просто устанавливаете obj.isUnitTesting = true и obj.unitTestTime в любое время. После этого вы можете отправить первое место слушателю, затем вы измените время (+ x секунд) и отправьте другое местоположение...
Это будет намного проще протестировать ваше приложение таким образом.
Ответ 6
В расширенных элементах управления вашего эмулятора (нажмите "..." на панели управления рядом с вашим эмулятором) есть вкладка "Место", где вы можете вручную вводить отдельные местоположения (широта/долгота/высота) и отправлять их к виртуальному устройству или настроить воспроизведение данных GPS с требуемой скоростью из GPX или файла KML, который вы можете импортировать.
Изменить: это эмулятор Android по умолчанию, о котором я говорю.