在我们的应用程序中使用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,但是在运行单元测试而不是实际应用程序时。
如何解决这个问题的任何想法将不胜感激。
答案 0 :(得分:-1)
我们似乎找到了问题。
我们在eclipse上使用了两个项目,实际上是三个:一个是父项,一个是应用程序,另一个是测试。
NoClassDefFoundError问题来自于从eclipse中运行测试时从错误的依赖项加载的RoboGuice类。
我们注意到一条消息:“......使用了不同的Lroboguice / util / RoboContext;在预验证期间...”,略高于LogCat视图中的错误。
似乎解决了这个问题的方法是从测试中删除(不需要的)依赖项 项目并只保留在实际的应用程序项目中,现在一切都可以正常使用maven和eclipse。
这似乎表明使用eclipse的dex生成不止一次地处理RoboGuice jar,在运行要测试的应用程序时生成不同的引用。如果实际需要依赖,我不知道如何解决这个问题。
以为我会在这里回答这个问题,希望能帮助别人......