我在运行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。
答案 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());
}
}
}