无法解决以下活动:意图

时间:2010-10-11 05:37:17

标签: android unit-testing

我在运行Android单元测试时遇到问题。当我尝试运行简单测试时出现此错误。

这是日志:

  

块引用   java.lang.RuntimeException:无法解析以下活动:Intent {act = android.intent.action.MAIN flg = 0x10000000 cmp = com.wsandroid.Activities / .SplashActivity}   在android.app.Instrumentation.startActivitySync(Instrumentation.java:371)   在android.test.InstrumentationTestCase.launchActivityWithIntent(InstrumentationTestCase.java:120)   在android.test.InstrumentationTestCase.launchActivity(InstrumentationTestCase.java:98)   在android.test.ActivityInstrumentationTestCase2.getActivity(ActivityInstrumentationTestCase2.java:87)   在com.wsandroid.test.activity.TestEULA.setUp(TestEULA.java:15)   在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)   在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)   在android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430)   在android.app.Instrumentation $ InstrumentationThread.run(Instrumentation.java:1447)

Android小于2.2时会出现此错误。它适用于Android 2.2模拟器。然而,Android 2.2模拟器有两次发送密钥的错误,即使我们只按了一次。要测试的应用程序在Android 2.2平台上运行。

感谢您是否有人可以帮助我。

Dzung。

7 个答案:

答案 0 :(得分:12)

我的应用程序的简单测试项目遇到了类似问题,这只是一个启动画面。我发现我实现了构造函数错误。我最初的构造函数实现是这个......

public SplashScreenTest(){
    super("com.mycomp.myapp.SplashScreen", SplashScreen.class);
}

在我的头撞墙后,我不知何故决定从super()的pkg参数中删除SplashScreen。我的成功实施现在就像这样......

public SplashScreenTest() {
    super("com.mycomp.myapp", SplashScreen.class);
}

我希望这可以帮助您或其他人解决问题。

答案 1 :(得分:10)

这也可能是由于失踪造成的

确保清单中有相应的条目。

<activity android:name=".SplashActivity"  ...

答案 2 :(得分:7)

尝试检查您的Manifest.xml文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.tablet.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="8" />
    <!-- This line below! -->
    <instrumentation android:targetPackage="com.tablet.tablet"
    android:name="android.test.InstrumentationTestRunner" /> 
</manifest> 

您需要检查以下行:

<instrumentation android:targetPackage="com.tablet.tablet"
android:name="android.test.InstrumentationTestRunner" /> 

因此targetPackage必须与代码中的相同。

答案 3 :(得分:3)

使用 AndroidAnnotations lib时,我遇到了类似的问题。

后来,我发现它是由于忘记使用生成的类(MyActivity_而不是MyActivity)。

答案 4 :(得分:0)

在我的情况下,问题是TestFragmentActivity,意思是我们的测试中使用的Activity

extends ActivityInstrumentationTestCase2<TestFragmentActivity>

必须在Manifest.xml中定义的包中作为targetPackage提供:

<instrumentation
    android:name="android.test.InstrumentationTestRunner"
    android:targetPackage="de.my.androidhd" />

我的解决方案是将TestFragmentActivity移动到经过测试的应用程序包中。

答案 5 :(得分:0)

我在不同的包中有两个同名的活动。问题是关于从错误的包中导入。我花了很多时间,也许它会节省一些时间。

答案 6 :(得分:-1)

对于两次发送的密钥问题,您确定现在还没有同时获得Down和Up操作吗?我在使用Robotium时遇到了这个问题,并将其生成为简化操作:

import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.widget.EditText;
import com.jayway.android.robotium.solo.Solo;

        public static void type(Solo robot, EditText edit, String text) {
            int index = 0;
            //Find the index of this control, as Robotium doesn't seem to like R.id
            for (int i = 0; i < robot.getCurrentEditTexts().size(); i++) {
                if (robot.getCurrentEditTexts().get(i).getId() == edit.getId()) {
                    index = i;
                }
            }

            robot.clickOnEditText(index);

            KeyCharacterMap map = KeyCharacterMap.load(KeyCharacterMap.BUILT_IN_KEYBOARD);
            KeyEvent[] events = map.getEvents(text.toCharArray());

            for (int event = 0; event < events.length; event++) {
                if (events[event].getAction() == KeyEvent.ACTION_DOWN) {
                    robot.sendKey(events[event].getKeyCode());
                }
            }
        }