我已经尝试了我能想到的一切,但仍然无法使用Robotium运行我的测试。
我将robotium库和我的主项目设置为按照建议的项目配置导出here
我已根据建议here
将android:debuggable
标记设置为true
我还检查了android:targetPackage
已按照建议here
还尝试在将测试模块构建到Provided
而不是Compile
时更改主项目依赖项的范围(我不确定它是做什么的......)
以下是Test项目的AndroidManifest:
<?xml version="1.0" encoding="utf-8"?>
<!-- package name must be unique so suffix with "tests" so package loader doesn't ignore us -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.matthieu.tests"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="4"
android:targetSdkVersion="17" />
<application
android:debuggable="true">
<uses-library android:name="android.test.runner"/>
</application>
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.matthieu"
android:label="Tests for com.matthieu"/>
</manifest>
以下是我得到的例外情况:
java.lang.RuntimeException: Exception during suite construction
at android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests.testSuiteConstructionFailed(TestSuiteBuilder.java:239)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:520)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
Caused by: java.lang.reflect.InvocationTargetException
at com.matthieu.MainMenuActivityTest.<init>(MainMenuActivityTest.java:26)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
at android.test.suitebuilder.TestMethod.instantiateTest(TestMethod.java:87)
at android.test.suitebuilder.TestMethod.createTest(TestMethod.java:73)
at android.test.suitebuilder.TestSuiteBuilder.addTest(TestSuiteBuilder.java:263)
at android.test.suitebuilder.TestSuiteBuilder.build(TestSuiteBuilder.java:185)
at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:373)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4218)
at android.app.ActivityThread.access$3000(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2071)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NoClassDefFoundError: com.matthieu.MainMenuActivity
... 19 more
另请注意,我在logcat中看到了一些这样的错误:
01-04 14:44:51.822: WARN/dalvikvm(1263): Class resolved by unexpected DEX: Lcom/matthieu/MainMenuActivity;(0x44e7f980):0x249f70 ref [Lcom/actionbarsherlock/app/SherlockFragmentActivity;] Lcom/actionbarsherlock/app/SherlockFragmentActivity;(0x44e7f980):0x121770
01-04 14:44:51.833: WARN/dalvikvm(1263): (Lcom/matthieu/MainMenuActivity; had used a different Lcom/actionbarsherlock/app/SherlockFragmentActivity; during pre-verification)
01-04 14:44:51.851: WARN/dalvikvm(1263): Unable to resolve superclass of Lcom/matthieu/MainMenuActivity; (644)
01-04 14:44:51.851: WARN/dalvikvm(1263): Link of class 'Lcom/matthieu/MainMenuActivity;' failed
01-04 14:44:51.851: ERROR/dalvikvm(1263): Could not find class 'com.matthieu.MainMenuActivity', referenced from method com.matthieu.MainMenuActivityTest.testFirstTimeAppOpening
01-04 14:44:51.851: WARN/dalvikvm(1263): VFY: unable to resolve check-cast 849 (Lcom/matthieu/MainMenuActivity;) in Lcom/matthieu/MainMenuActivityTest;
如果它有任何区别,我使用IntelliJ Idea(11.1.5),SDK 17,SDK Tools 21.0.1并将Robotium更新为3.6
更新:
找到一个相关的讨论here。我可以看到不同的错误消息,无论我只运行一个测试还是所有测试,我的应用程序确实使用FragmentActivity。但无论我做什么,我都无法进行任何测试(不是一个,不是全部)......
答案 0 :(得分:3)
当您执行以下操作时,会发生此类错误。
1.如果您在清单文件中输入了“android:targetPackage”的错误包名。 所以请检查清单文件中的目标包名称。
2.如果您为Android应用程序和测试项目添加相同的库。
当你为Android应用程序和测试项目添加相同的库时会出现歧义。所以请将库添加到app项目中。
答案 1 :(得分:2)
最后....我找到了唯一能找到它的方法there
不要将Robotium测试用例放在一个单独的模块中......不知道为什么没有办法让它工作,但我真的尝试了我能想到的或者我能找到的所有东西。
答案 2 :(得分:1)
我有一段时间遇到这个问题并尝试了很多东西,最终对我有用的只是进入
属性 - &gt; Java构建路径 - &gt;项目
用于测试项目,然后删除正在测试的项目并再次添加。 (由于我无法重现问题并且不记得细节,因此最安全的方法是删除被测项目,然后清理两个项目,然后添加待测项目)
答案 3 :(得分:0)
我再次遇到了同样的问题(请参阅本页的其他答案),但这次无法使用我自己的解决方案解决问题。这次我找到了另一种解决方案:通过右键单击测试项目然后
删除测试项目的私有库属性 - &gt; Java构建路径 - &gt;库
并删除“Android私有库”
PS我的回答受到了我在此页面上找到的信息的启发:http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17
答案 4 :(得分:0)
我面临同样的问题。它的发生只是因为我试图用JUnit
而不是Android JUnit test
来测试我的项目。
为此,make test 项目右键单击它&gt;以&gt;运行Android Junit测试 。 它在我的案例中有效。
祝你好运