アプリケーションで 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
) を使用すると、テストは完全に実行されます。
重要なことの 1 つは、アクティビティ クラスが 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、inject の依存関係をアプリケーションの libs フォルダーにコピーすると (そして依存関係を pom.xml で提供されているものとしてマークすると)、Eclipse 上でテストが美しく実行されることに注意してください。そのため、ADT で実行されている Android 単体テストが Maven の依存関係を識別できないという問題があるようです。
この問題に非常に似ているようです: Android/RoboGuice/Maven: ClassNotFoundException in Eclipse, but not from Maven command line , しかし、実際のアプリケーションではなく単体テストを実行している場合。
この問題を回避する方法についてのアイデアは大歓迎です。