I have a location tracking service that I am trying to use unit test. For this, I'm trying to use the locationManager.addTestProvider and setTestProviderLocation methods. However, it seems that I can not find any place to go through the provider and hit my LocationListener. Here is my code:
public void testGettingLocations() { mLocationManager = (LocationManager)mContext.getSystemService(Context.LOCATION_SERVICE); if (mLocationManager.getProvider(TEST_PROVIDER) != null) { mLocationManager.removeTestProvider(TEST_PROVIDER); } mLocationManager.addTestProvider(TEST_PROVIDER, false, false, false, false, false, false, false, Criteria.POWER_LOW, Criteria.ACCURACY_FINE); mLocationManager.setTestProviderEnabled(TEST_PROVIDER, true); mLocationManager.setTestProviderStatus(TEST_PROVIDER, LocationProvider.AVAILABLE, null, System.currentTimeMillis()); locations = new ArrayList<Location>(); mLocationManager.requestLocationUpdates(TEST_PROVIDER, 0, 0, ll); for (int i = 0; i<130; i++) { Location loc = new Location(TEST_PROVIDER); loc.setLatitude(0 + i); loc.setLongitude(130 - i); loc.setTime(System.currentTimeMillis()); loc.setSpeed(0); loc.setAccuracy(25); loc.setAltitude(0); loc.setBearing(0); mLocationManager.setTestProviderLocation(TEST_PROVIDER, loc); } assertEquals(130, locations.size()); } LocationListener ll = new LocationListener() { @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) {} @Override public void onProviderDisabled(String provider) {} @Override public void onLocationChanged(Location location) { locations.add(location); Log.d("TEST", "lat: " + location.getLatitude() + ", lon: " + location.getLongitude()); } };
The statement fails because places.size () returns 0 and the log statement in my locationlistener is never printed.
Has anyone had success using these methods for unit test location services?
android unit-testing geolocation
danh32
source share