5

我无法让任何扩展 ServiceTestCase 的测试用例运行。没有错误,它们只是没有执行。

其他扩展 AndroidTestCase 的测试用例会运行。

项目设置如下:

我有一个包含服务的 Android 库。它的清单文件如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.something.android"
  android:versionCode="1"
  android:versionName="1.0">
<uses-sdk android:minSdkVersion="9"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application>
    <service android:name=".ExampleService" 
        android:exported="false"
    android:process=":example_service">
    </service>
</application>
</manifest>

Android 库项目在文件夹 test 中包含一个测试项目(使用 Android 工具创建)

这包含一个 AndroidManfiest.xml 如下

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.something.android.tests"
      android:versionCode="1"
      android:versionName="1.0">
<application>
    <uses-library android:name="android.test.runner" />
</application>
<instrumentation android:name="android.test.InstrumentationTestRunner"
                 android:targetPackage="com.something.android.tests"
                 android:label="Tests for com.something.android"/>
</manifest>

我在测试项目中也有一个 build.properties,其中包含:

测试.project.dir=.. android.library.reference.1=..

我通过运行 ant clean run-tests 来执行测试。

我需要做什么才能运行 ServiceTestCase 测试?

提前致谢。

4

2 回答 2

11

确保为 ServiceTestCase 提供默认构造函数。Eclipse 为您生成的那个可能不合适。例如,在我的例子中,Eclipse 为我生成:

public class MyServiceTestCase extends ServiceTestCase<MyService> {

  public MyServiceTestCase(Class<MyService> serviceClass) {
    super(serviceClass);
  }
  ...
}

Android JUnit 无法实例化 MyServiceTestCase,但它没有抱怨,我只能看到没有运行测试用例。

因此,我将构造函数替换为以下内容,并且效果很好:

public class MyServiceTestCase extends ServiceTestCase<MyService> {

  public MyServiceTestCase() {
    super(MyService.class);
  }
  ...
}

希望对你有效。

于 2012-01-24T03:01:16.553 回答
0

接受的答案不再对我有用。

像 ActivityInstrumentationTestCase2 或 ServiceTestCase 这样的测试用例已被弃用,取而代之的是 ActivityTestRule 或 ServiceTestRule。

ATSL 链接

他们似乎忘记更新实际文档。

于 2016-06-03T22:14:09.427 回答