无法解决以下活动:在检测Android活动的仪器时意图

时间:2012-01-13 17:48:55

标签: java android instrumentation

当我尝试在Android上运行insturmentation测试时,我遇到了错误。我写了一个名为 AudioPlayerActivity 的活动,它位于包 com.mycompany.mobile.android.gui 中,现在我正在尝试测试它的GUI项目,我正在运行以下错误:

  

java.lang.RuntimeException:无法解析以下活动:Intent {act = android.intent.action.MAIN flg = 0x10000000 cmp = com.mycompany.mobile.android.gui / .AudioPlayerActivity}

我已阅读this question,并遵循了那里的建议,但无济于事。我也搜索了错误,但没有找到任何帮助。

这是测试项目的AndroidManifest.xml的样子:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mycompany.mobile.android.gui"
    android:versionCode="1"
    android:versionName="1.0" >

    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.mycompany.mobile.android.gui" />
    <application>
        <uses-library android:name="android.test.runner" />
    </application>

    <uses-sdk android:targetSdkVersion="7" />
    <supports-screens android:anyDensity="true" />
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>

这是我的仪器测试。

包com.mycompany.mobile.android.gui;

import android.test.ActivityInstrumentationTestCase2;

import com.mycompany.mobile.android.gui.AudioPlayerActivity;

public class TestMusicPlayerActivityTest extends ActivityInstrumentationTestCase2<AudioPlayerActivity> {
    public TestMusicPlayerActivityTest() {
            super("com.mycompany.mobile.android.gui", AudioPlayerActivity.class);
    }

    public TestMusicPlayerActivityTest(String name) {
        super("com.mycompany.mobile.android.gui", AudioPlayerActivity.class);
    }

    public TestMusicPlayerActivityTest(String pkg, Class<AudioPlayerActivity> activityClass) {
        super("com.mycompany.mobile.android.gui", AudioPlayerActivity.class);
    }

    public void testSomething() {
        System.out.println("Nothing works :(");
        System.out.println(getActivity());
    }   
}

我们正在通过maven运行整个过程,但这不应成为问题的一部分。

如您所见,测试的Activity也位于同一个包中。我不会使用活动而不是包名称来调用超级构造函数,因为大多数人都有此问题。

为了您的兴趣,这是描述测试活动的AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mycompany.mobile.android.gui"
    android:versionCode="1"
    android:versionName="1.0" >

    <!-- omitted Uses permission + Uses SDK -->
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:debuggable="true"
        android:theme="@style/NoTitleBar"
    >
    <!-- omitted other activities -->
        <activity 
            android:name="com.mycompany.mobile.android.gui.AudioPlayerActivity"
            android:screenOrientation="portrait" ></activity>
    </application>
</manifest>

我还将活动添加到AndroidManifest.xml中,但这并未改变任何内容。我还尝试为所需的活动添加MAIN / LAUNCHER意图过滤器,但是这并没有改变测试的结果。我尝试用额外的东西开始活动,没有它们,这也没有改变结果。

2 个答案:

答案 0 :(得分:6)

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.mycompany.mobile.android.gui"
... ...

您是否在Android项目和Android测试项目中使用相同的软件包名称?这可能是一个问题,但我不确定它是否会导致您的java.lang.RuntimeException。

根据官方开发指南here,您的测试项目必须与您测试的项目具有不同的包名称:

  

Android程序包名称是.apk文件的唯一系统名称,由程序包清单中元素的“android:package”属性设置。 测试包的Android软件包名称必须与待测试应用程序的Android软件包名称不同。默认情况下,Android工具通过将“.test”附加到软件包名称来创建测试软件包名称。被测试的申请书。

尝试将包名称com.mycompany.mobile.android.gui.test用于测试项目。

答案 1 :(得分:0)

您将其作为Android项目运行,尝试将其作为Android测试项目运行

adb shell am instrument -e package&lt; java package&gt; -w&lt; test apk package&gt; /android.test.InstrumentationTestRunner