android - 运行 Robotium 时 FragmentActivity 类的 java.lang.NoClassDefFoundError

标签 android intellij-idea robotium android-fragmentactivity android-testing

我已经尝试了所有我能想到的方法,但我仍然无法使用 Robotium 运行我的测试。

我按照建议在项目配置中设置要导出的 robotium 库和我的主项目 here

我已按照建议将 android:debuggable 标志设置为 true here

我还检查了 android:targetPackage 是否按照建议在 list 中正确设置了 here

还尝试在构建测试模块时将主要项目依赖项的范围更改为 Provided 而不是 Compile (我不确定那是做什么的...)

这是测试项目的 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。但是无论我做什么,我都无法运行任何测试(不是一个,不是全部)...

最佳答案

此类错误发生在您执行以下操作时。

1.如果您在 list 文件中为“android:targetPackage”输入了错误的包名称。 所以请检查 list 文件中的目标包名称。

2.如果你为android应用和测试项目添加相同的库。

当您为 Android 应用程序和测试项目添加相同的库时会发生歧义。因此请仅将库添加到应用程序项目。

关于android - 运行 Robotium 时 FragmentActivity 类的 java.lang.NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14152536/

相关文章:

android - 如何在 Android Studio 中显示依赖关系树?

java - 如何阻止 IntelliJ IDEA 在启用 "External Libraries"的情况下扩展 "Autoscroll from Source"?

android - Robotium 在最新的 4.2 Jelly-bean 上抛出 NullPointerException

Android studio gradle 升级失败(http ://schemas. android.com/apk/res/android URI 未注册)

android - ExpandableListView onExpand 总是将展开的组滚动到顶部

android - Android 设备重新启动时,Web View 中的 Cookie、本地存储值是否被删除?

android - 没有 "heads up"的通知

intellij-idea - 我可以在 Intellij 结构搜索中使用过滤器来引用变量计数吗?

android - Robotium:为 .apk 文件创建测试项目