在我们的应用程序上使用 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,而是在运行单元测试而不是实际应用程序时。
任何有关如何解决此问题的想法将不胜感激。