Android 仪器测试项目中的测试位置提供程序

发布于 2024-10-02 03:57:02 字数 1582 浏览 0 评论 0原文

我有一个使用 LocationManager 的应用程序。因此我现在正在编写仪器测试。我已经找到了类似的答案,但这不适用于我。

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。要点是,仪器测试 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> 

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

I have an application, which uses the LocationManager. Therefore I'm now writing an instrumentation test. I've found already a similar answer, but this won't work for me.

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());
  }
}

The test fails during the "addTestProvider" with a SecurityException that the "android.permission.ACCESS_MOCK_LOCATION" is missing. The Point is that the instrumentation test AndroidManifest.xml has this uses permission, but the application to test not.

<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> 

Has somebody an idea how to solve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦醒灬来后我 2024-10-09 03:57:02
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

应该在 之外

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

should be outside of <application></application>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文