won*_*0lt 4 java instrumentation android
当我尝试在android上运行insturmentation测试时,我遇到了错误.我编写了一个名为AudioPlayerActivity的Activity,它位于com.mycompany.mobile.android.gui包中,现在我正在尝试测试该项目的GUI,并且我运行的是以下错误:
java.lang.RuntimeException:无法解析以下活动:Intent {act = android.intent.action.MAIN flg = 0x10000000 cmp = com.mycompany.mobile.android.gui/.AudioPlayerActivity}
我已经阅读了这个问题,并遵循了那里的建议,但无济于事.我也搜索了错误,但没有找到任何帮助.
这是测试项目的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>
Run Code Online (Sandbox Code Playgroud)
这是我的仪器测试.
包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());
}
}
Run Code Online (Sandbox Code Playgroud)
我们通过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>
Run Code Online (Sandbox Code Playgroud)
我还将活动添加到AndroidManifest.xml中,但这并未改变任何内容.我还尝试为所需的活动添加MAIN/LAUNCHER意图过滤器,但是这并没有改变测试的结果.我尝试用额外的东西开始活动,没有它们,这也没有改变结果.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mycompany.mobile.android.gui"
... ...
Run Code Online (Sandbox Code Playgroud)
您是否为Android项目和Android测试项目使用相同的软件包名称?这可能是一个问题,但我不确定它是否会导致您的java.lang.RuntimeException.
根据此处的官方开发指南,您的测试项目必须与您测试的项目具有不同的包名称:
Android程序包名称是.apk文件的唯一系统名称,由程序包清单中元素的"android:package"属性设置.测试包的Android包名称必须与要测试的应用程序的Android包名称不同.默认情况下,Android工具通过将".test"附加到要测试的应用程序的包名称来创建测试包名称.
尝试将包名称com.mycompany.mobile.android.gui.test用于测试项目.
| 归档时间: |
|
| 查看次数: |
6499 次 |
| 最近记录: |