0

Activitywhich extendsの計測テストをセットアップしようとしていますがSherlockActivity、コンパイル (および実行) されますが、例外で失敗しNoClassDefErrorます:

junit.framework.AssertionFailedError: Exception in constructor: testPreconditions     (java.lang.NoClassDefFoundError: com.dgti.ds.activities.ChooseLocationActivity
at com.dgti.ds.test.activities.ChooseLocationActivityTest.<init>(ChooseLocationActivityTest.java:11)
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)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3246)
at android.app.ActivityThread.access$2200(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:969)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(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:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)

私は Maven を使用してActionBarSherlockおり、テスト プロジェクトの pom.xml で依存関係として取得しています。

<dependency>
  <groupId>com.actionbarsherlock</groupId>
  <artifactId>actionbarsherlock</artifactId>
  <version>4.2.0</version>
  <scope>provided</scope>
  <type>apklib</type>
</dependency> 

これはテストケースです:

public class ChooseLocationActivityTest extends ActivityInstrumentationTestCase2<ChooseLocationActivity> {

    public ChooseLocationActivityTest() {
        this(ChooseLocationActivity.class);
    }

    public ChooseLocationActivityTest(Class<ChooseLocationActivity> activityClass) {
        super(activityClass);
    }

    public void setUp() throws Exception {

    }

    public void tearDown() throws Exception {

    }

    public void testPreconditions() throws Exception {

    }
}

アクティビティを Sherlock 以外のアクティビティに変更すると、他のテストとこのテストを正常に実行できることに言及する価値があります。

また、maven コマンド ラインからのテスト プロジェクトのビルドと実行が機能し、テストがエミュレーターで実行され、合格しています。

どうすればこれを修正できますか?

4

1 に答える 1

4

どうやら問題は、テストプロジェクトの依存関係リストで「コンパイル」とマークされたActioBarSherlock依存関係にありました。(pom.xmlでは'provided'に設定されています)

これを「提供済み」に変更すると、問題が修正されました。

于 2012-11-04T14:52:34.513 に答える