6

Androidテスト(Robotiumを使用)でMockito(1.9.5 rc1)を動作させようとしています。DVMで実行するために、テストプロジェクトのクラスパスにdexmaker.jarとdexmaker-mockito.jar(v 0.9)を配置しました。

EclipseでAndroidJUnitテストとして次のテストを実行する場合:

package com.stampay.pos.test;

import roboguice.RoboGuice;
import android.app.Application;

import com.jayway.android.robotium.solo.Solo;
import com.stampay.pos.activities.HomeActivity;
import com.stampay.pos.model.Consumer;
import com.stampay.pos.util.ScannerAndroid;

import static org.mockito.Mockito.*;

public class HomeActivityTest extends ActivityTest<HomeActivity> {
    private Solo solo;
    Application app;

    public HomeActivityTest() {
        super(HomeActivity.class);

    }

    @Override
    public void setUp() throws Exception {
        solo = new Solo(getInstrumentation(), getActivity());
    }

    @Override
    public void tearDown() throws Exception {
        solo.finishOpenedActivities();
        RoboGuice.util.reset();
    }

    public void testScan() throws Exception {

        ScannerAndroid scanner = (ScannerAndroid) getActivity().getScannerHelper();

        Consumer mockConsumer = mock(Consumer.class);

        //scanner.generateResult("consumer1");
    }
}

次のスタックトレースを取得します。

java.lang.ExceptionInInitializerError
at com.stampay.pos.test.HomeActivityTest.testScan(HomeActivityTest.java:41)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)
Caused by: java.lang.ExceptionInInitializerError
at org.mockito.internal.MockitoCore.<init>(MockitoCore.java:40)
at org.mockito.Mockito.<clinit>(Mockito.java:932)
... 15 more
Caused by: java.lang.ExceptionInInitializerError
at org.mockito.internal.util.MockUtil.<clinit>(MockUtil.java:21)
... 17 more
Caused by: org.mockito.exceptions.misusing.MockitoConfigurationException: Failed to load interface org.mockito.plugins.MockMaker using jar:file:/data/app/com.stampay.pos.test-2.apk!/mockito-extensions/org.mockito.plugins.MockMaker
... 15 more
Caused by: java.lang.ClassNotFoundException: com.google.dexmaker.mockito.DexmakerMockMaker
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at org.mockito.internal.configuration.ClassPathLoader.loadImplementations(ClassPathLoader.java:133)
at org.mockito.internal.configuration.ClassPathLoader.findPlatformMockMaker(ClassPathLoader.java:102)
at org.mockito.internal.configuration.ClassPathLoader.<clinit>(ClassPathLoader.java:61)
at org.mockito.internal.util.MockUtil.<clinit>(MockUtil.java:21)
at org.mockito.internal.MockitoCore.<init>(MockitoCore.java:40)
at org.mockito.Mockito.<clinit>(Mockito.java:932)
... 15 more

助言がありますか?http://code.google.com/p/dexmaker/およびhttp://code.google.com/p/mockito/wiki/ReleaseNotesは、役立つ情報を提供していません。

同様の問題がここで報告されているようです:http://www.paulbutcher.com/2012/05/mockito-on-android-step-by-step/#comment-65955

更新: https://github.com/paulbutcher/mockito-on-android/tree/master/WarehouseManagerTest/libsの.jarファイルを使用すると、1.9.1に基づくMockitoの古いスナップショットを使用しますが、すべてスムーズに機能します。

4

1 に答える 1

3

mockito1.9.5-rc1を使用しようとしても同じ問題が発生しました。

dexmakerページには、これには1.9.5+が必要であると記載されており、明らかにRC1はそれをカットしません。Mockito 1.9.5は数日前にリリースされたばかりのようですので、まもなくMavenCentralに表示されるはずです。

それまでの間、Mockitoのサイトから1.9.5zipをダウンロードできます。Mavenを使用している場合は、を使用してこれらのjarをローカルリポジトリに手動でインストールできますmvn install:install-file。また、最新のMockitoソース(未リリースの1.9.8)をチェックアウトし、ビルドして、ローカルのMavenリポジトリにインストールすることで、これを機能させることができました。

于 2012-10-09T15:15:35.717 に答える