【发布时间】:2011-08-22 15:01:38
【问题描述】:
我正在尝试对位置跟踪服务进行单元测试。我正在尝试使用 locationManager.addTestProvider 和 setTestProviderLocation 方法来实现这一点。但是,我似乎无法让任何位置通过提供程序并点击我的 LocationListener。这是我的代码:
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());
}
};
断言失败,因为 locations.size() 返回 0,并且我的 locationlistener 中的日志语句永远不会被打印出来。
有没有人成功使用这些方法对位置服务进行单元测试?
【问题讨论】:
-
我还要提一下,我确实拥有测试项目和实际项目的 ACCESS_MOCK_LOCATIONS 权限。
-
你解决了吗?我有同样的问题吗?
标签: android unit-testing geolocation