0

在我们的应用程序上使用 RoboGuice 2.0 时,我们在 Eclipse 中运行集成单元测试时遇到问题。

当我们尝试在模拟器上运行单元测试类(作为 Android JUnit 测试)时,我们得到以下异常,因此测试甚至没有运行:

junit.framework.AssertionFailedError: Exception in constructor: testAddNote (java.lang.NoClassDefFoundError: br.org.certi.android.pgpsip.client.measure.activity.MeasureActivity
at br.org.certi.android.pgpsip.client.test.MeasureActivityTest.<init>(MeasureActivityTest.java:14)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:415)
at junit.runner.BaseTestRunner.getTest(BaseTestRunner.java:103)
at android.test.AndroidTestRunner.getTest(AndroidTestRunner.java:127)
at android.test.AndroidTestRunner.setTestClassName(AndroidTestRunner.java:55)
at android.test.suitebuilder.TestSuiteBuilder.addTestClassByName(TestSuiteBuilder.java:81)
at android.test.InstrumentationTestRunner.parseTestClass(InstrumentationTestRunner.java:418)
at android.test.InstrumentationTestRunner.parseTestClasses(InstrumentationTestRunner.java:399)
at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:364)
...

这是测试类的相关部分,我希望它足够了:

public class MeasureActivityTest extends ActivityInstrumentationTestCase2<MeasureActivity> {

public MeasureActivityTest() {
    super(MeasureActivity.class);
}

使用 maven ( mvn clean install) 测试运行完美。

一件重要的事情是,如果活动类不依赖于 RoboGuice,它也可以在 eclipse 上正常工作。

的相关部分pom.xml

<dependency>
    <groupId>org.roboguice</groupId>
    <artifactId>roboguice</artifactId>
    <version>2.0</version>
</dependency>
<dependency>
    <groupId>com.google.inject.extensions</groupId>
    <artifactId>guice-multibindings</artifactId>
    <version>3.0</version>
    <exclusions>
        <exclusion>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
        </exclusion>
    </exclusions>
</dependency>

我们注意到,当我们将 roboguice、guice 和注入依赖项复制到应用程序的 libs 文件夹(并将依赖项标记为 pom.xml 中提供的)时,测试在 eclipse 上运行良好。所以这似乎是在 ADT 中运行的 android 单元测试无法识别 maven 依赖项的问题。

它似乎与这个问题非常相似: Android/RoboGuice/Maven: ClassNotFoundException in Eclipse, but not from Maven command line,而是在运行单元测试而不是实际应用程序时。

任何有关如何解决此问题的想法将不胜感激。

4

1 回答 1

-1

我们似乎找到了问题所在。

我们在 Eclipse 上使用了两个项目,实际上是三个:一个父项目,一个用于应用程序,一个用于测试。

NoClassDefFoundError 问题来自于从 Eclipse 内部运行测试时从错误的依赖项加载 RoboGuice 的类。

我们注意到这样的消息:“... has used a different Lroboguice/util/RoboContext; during pre-verification ...”,略高于 LogCat 视图上的错误。

似乎已经解决了这个问题的是从测试项目中删除(不需要的)依赖项,并将其仅保留在实际的应用程序项目中,现在一切都可以在 Maven 和 Eclipse 中正常工作。

这似乎表明使用 eclipse 的 dex 生成不止一次处理 RoboGuice jar,在运行要测试的应用程序时生成不同的引用。如果确实需要依赖项,我不知道如何解决这个问题。

以为我会在这里回答这个问题,希望它可以帮助其他人......

于 2012-08-17T22:32:25.743 回答