在android instrumentation测试项目中测试位置提供程序

时间:2010-11-15 14:53:30

标签: android unit-testing location

我有一个使用LocationManager的应用程序。因此,我现在正在编写仪器测试。我发现已有类似的answer,但这对我不起作用。

public class LocationSensorTest extends AndroidTestCase {
  /*package*/ LocationManager lm;
  private LocationSensor sensor;

  @Override
  protected void setUp() throws Exception {
    super.setUp();
    sensor = new LocationSensor(getContext());
    lm = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE);
    lm.addTestProvider("test", false, false, false, false, false, false, false, Criteria.POWER_LOW, Criteria.ACCURACY_FINE);
    lm.setTestProviderEnabled("test", true);
  }

  public void testHasAnyActiveLocationProvider() {
    assertTrue(sensor.hasAnyActiveLocationProvider());
  }
}

在“addTestProvider”期间,测试失败,并显示缺少“android.permission.ACCESS_MOCK_LOCATION”的SecurityException。 Point是测试测试AndroidManifest.xml有这个使用权限,但应用程序不测试。

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="de.app.android.tests" android:versionCode="1" android:versionName="1.0">
  <application>
    <uses-library android:name="android.test.runner" />
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
  </application>
  <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="de.app.android" android:label="Requester App Tests" />
  <uses-sdk android:minSdkVersion="4" />
</manifest> 

有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

应该在<application></application>

之外