如何正确使用android.test.ServiceTestCase?

时间:2015-10-23 21:17:02

标签: android android-service android-testing

我的应用是在/ system / app

中运行的服务
com.abc.def.MyApp

尝试为它编写单元测试,我在运行时在logcat中收到此错误。

I/TestGrouping( 5647): TestCase class com.abc.def.test.MyAppTest is missing a public constructor with no parameters or a single String parameter - skipping

使用的命令:

D:\tmp_install>adb shell am instrument -w com.abc.def.test/android.test.InstrumentationTestRunner
WARNING: linker: memtrack.jacinto6.so: unused DT entry: type 0xf arg 0x115
WARNING: linker: libsrv_um.so: unused DT entry: type 0xf arg 0xc4e
WARNING: linker: gralloc.jacinto6.so: unused DT entry: type 0xf arg 0x5d9
WARNING: linker: libpvr2d.so: unused DT entry: type 0xf arg 0x778

Test results for InstrumentationTestRunner=
Time: 0.0

OK (0 tests)

我的代码片段是:

public class MyAppTest extends ServiceTestCase<MyApp> {
public MyAppTest(Class serviceClass) {
      super(serviceClass);
      Log.d(tag, "hello world! MyAppTest ctor");
}
public MyAppTest() {
  super(com.abc.def.MyApp.class);
}

...

我已按照此回答https://stackoverflow.com/a/8981508/398348

我是否错误地使用了ServiceTestCase?

1 个答案:

答案 0 :(得分:2)

从我看到的情况来看,您正确使用ServiceTestCase

通常你需要的是没有参数的构造函数,它可以正常工作并且你已经提供了它。

public MyAppTest() {
    super(com.abc.def.MyApp.class);
}

您获得的linker警告通常与NDK相关联。它们对你的测试仍然不应该是一个问题。

虽然不是一个完整的解决方案,但我建议您尝试使用gradle connectedAndroidTest运行相同的测试。如果它们运行正常,至少我们知道问题出在am instrument - 可能没有正确配置TEST project

编辑:如果您正在使用Gradle来构建项目(默认情况下,如果您使用的是Android Studio),只需进入主项目目录并执行以下命令,该命令将运行您的所有仪器测试(如上面的ServiceTestCase示例)。

./gradlew connectedAndroidTest