【问题标题】:java.lang.NoClassDefFoundError for FragmentActivity class when running Robotium运行 Robotium 时 FragmentActivity 类的 java.lang.NoClassDefFoundError
【发布时间】:2013-01-04 06:55:10
【问题描述】:

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

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

我已按照建议 hereandroid:debuggable 标志设置为 true

我还检查了 android:targetPackage 是否按照建议在清单中正确设置 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。但无论我做什么,我都无法运行任何测试(不是一个,不是全部)......

【问题讨论】:

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


    【解决方案1】:

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

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

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

    当您为 android 应用程序和测试项目添加相同的库时会出现歧义。所以请仅将库添加到应用程序项目。

    【讨论】:

      【解决方案2】:

      终于....我找到了让它工作的唯一方法there

      不要将 Robotium 测试用例放在一个单独的模块中...不知道为什么没有办法让它工作,但实际上我尝试了所有我能想到或能找到的东西。

      【讨论】:

        【解决方案3】:

        我有一段时间遇到这个问题并尝试了很多东西,最终对我有用的只是进入

        属性 -> Java 构建路径 -> 项目

        用于测试项目,然后删除被测项目并再次添加。 (由于我无法重现问题并且不记得细节,因此删除被测项目,然后清理两个项目,然后添加被测项目可能是最安全的)

        【讨论】:

          【解决方案4】:

          我再次遇到了同样的问题(请参阅此页面上的其他答案),但这次无法用我自己的解决方案解决问题。这次我找到了另一个解决方案:通过右键单击测试项目然后删除测试项目的私有库

          属性 -> Java 构建路径 -> 库

          并删除“Android 私有库”

          PS 我的回答受到我在此页面上找到的信息的启发:http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17

          【讨论】:

            【解决方案5】:

            我面临同样的问题。它的发生只是因为我试图用 JUnit 而不是 Android JUnit test 测试我的项目。

            所以要进行测试项目右键单击它>运行为> A​​ndroid Junit测试。 它在我的情况下有效。

            祝你好运

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-06-23
              • 2017-07-16
              • 2013-11-04
              • 2014-09-15
              • 2012-10-23
              相关资源
              最近更新 更多