代码之家  ›  专栏  ›  技术社区  ›  philgiese

Android 2.1中的ActivityInstrumentationTestCase2是否存在问题?

  •  2
  • philgiese  · 技术社区  · 14 年前

    在我为我的Android应用程序设置了所有单元测试用例之后,我现在还想进行功能测试。但我遇到了一个问题。在我为HTC传奇开发的过程中,到目前为止,我只能使用2.1以下的Android平台。但在某种程度上,似乎 活动仪表测试用例2 不起作用。

    public SupplierSelectoinTest() {
        super("com.sap.catalogue.activities", SupplierSelection.class);
    }
    

    当我尝试运行测试时,这段简单的代码给了我以下错误:

    java.lang.RuntimeException: Unable to resolve activity for: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.sap.catalogue.activities/com.sap.catalogue.activities.SupplierSelection }
    at android.app.Instrumentation.startActivitySync(Instrumentation.java:371)
    at android.test.InstrumentationTestCase.launchActivityWithIntent(InstrumentationTestCase.java:120)
    at android.test.InstrumentationTestCase.launchActivity(InstrumentationTestCase.java:98)
    at android.test.ActivityInstrumentationTestCase2.getActivity(ActivityInstrumentationTestCase2.java:87)
    at com.sap.catalogue.test.acceptance.SupplierSelectoinTest.setUp(SupplierSelectoinTest.java:27)
    at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
    at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
    at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430)
    at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
    

    我通读了所有的教程,从中得到的就是,它应该可以工作,但它不能工作。不管怎样,当我切换到Android 2.2(目前还没有解决方案)并使用新的构造函数时,我只需要提交活动类,而不是pkg字符串,模拟器就可以毫无怨言地运行测试。

    但是必须有一种方法让它在安卓2.1中运行!

    此外 这是我的两个manifest.xml文件。第一个是应用程序本身。另一个是测试项目。

    应用程序清单.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.sap.catalogue"
          android:versionCode="1"
          android:versionName="1.0">
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".Catalogue"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
        <activity android:name=".activities.CategoryBrowser"></activity>
    
    <activity android:name=".activities.ProductDetails"></activity>
    <activity android:name=".activities.ProductSearch"></activity>
    <activity android:name=".activities.ProductView"></activity>
    <activity android:name=".activities.SupplierSelection"></activity>
    
    </application>
        <uses-sdk android:minSdkVersion="7" />
    
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    </manifest> 
    

    测试清单.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.sap.catalogue.test"
          android:versionCode="1"
          android:versionName="1.0">
        <application android:icon="@drawable/icon" android:label="@string/app_name">
    
        <uses-library android:name="android.test.runner" />
        </application>
        <uses-sdk android:minSdkVersion="7" />
        <instrumentation android:targetPackage="com.sap.catalogue" android:name="android.test.InstrumentationTestRunner" />
    
    </manifest> 
    
    2 回复  |  直到 10 年前
        1
  •  6
  •   Fred Medlin    14 年前

    使用顶级包名称。

    public SupplierSelectoinTest() {
        super("com.sap.catalogue", SupplierSelection.class);
    }
    
        2
  •  0
  •   Ömer    14 年前

    很可能,您没有在manifest.xml中编写活动。你也可以分享吗?

    编辑:

    将此添加到测试manifest.xml。我想这会解决你的问题。

    <activity android:name="com.sap.catalogue.activities.SupplierSelection"></activity>