37

Android プロジェクトで Mockito を使用しようとしています。私はそれを扱う非常に素晴らしいチュートリアルを見つけました: http://www.paulbutcher.com/2012/05/mockito-on-android-step-by-step/

基本的に、Mockito + Dexmaker の新しいバージョンを使用しており、すべてが期待どおりに機能します。
ただし、Android固有のオブジェクトをモックしようとすると、次のようになります。

Context context = mock(Context.class);

私はこの例外を受け取ります:

java.lang.IllegalArgumentException: 
    dexcache == null (and no default could be found; 
    consider setting the 'dexmaker.dexcache' system property)
at com.google.dexmaker.DexMaker.generateAndLoad(DexMaker.java:359)
at com.google.dexmaker.stock.ProxyBuilder.buildProxyClass(ProxyBuilder.java:252)
at com.google.dexmaker.mockito.DexmakerMockMaker.createMock(DexmakerMockMaker.java:54)
at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:26)

それを修正する方法はありますか?

4

7 に答える 7

33

@MrChazの答えに対する@rjathのコメントから、これは私にとってはうまくいきます:

System.setProperty(
    "dexmaker.dexcache",
    getInstrumentation().getTargetContext().getCacheDir().getPath());

私はそれを私のsetUp()方法に入れました。

于 2014-03-14T10:37:00.260 に答える
10

私は自分のために働いていると思われる修正をまとめることができました。マニフェストに、読み取りと書き込みの外部ストレージを追加しました。テストに追加System.setProperty("dexmaker.dexcache", "/sdcard");しました。エミュレータ イメージに SD カードを追加しました。

デフォルトではmockitoはアプリのキャッシュディレクトリを使用しようとしますが、アクティビティを実行しないため、OSによってディレクトリが作成されていないと思われるため、これはうまくいくと思います

于 2012-10-01T17:27:16.717 に答える
3

dexmakerプロジェクトがGoogle CodeからGitHubに移動したようです。

Maven 中央リポジトリには、2014 年 3 月と 2014 年 12 月に公開されたバージョン 1.1 と 1.2 があります。

この「dexcache == null」の問題がバージョン 1.2 まで存在することを確認しましたが、特定のデバイスでのみ発生します。たとえば、Android 5.0 を搭載した Galaxy S5 には問題があり、Android 4.4.2 を搭載した Galaxy S4 には問題がありません。

GitHub リポジトリのクローンを作成し (最後のコミットは 2015 年 3 月 12 日 - ca74669 )、ローカルで実行したところ、問題は修正されました (履歴にはこれを裏付けるコミットもあります)。したがって、1.3 がリリースされたら、この問題が完全に解消されることを願っています!

1.3-SNAPSHOT のローカル コピーを実行したい人は、次のようにします (Mac では、他のプラットフォームでも動作するはずです。PATHにmvnadb、およびdxが必要です)。

  1. git clonehttps://github.com/crittercism/dexmaker.git
  2. cd dexmaker
  3. mvn install -Dmaven.test.skip=true
  4. cp -R ~/.m2/repository/com/google/dexmaker $ANDROID_HOME/extras/android/m2repository/com/google
  5. 次に、次のバージョンを変更しapp/build.gradleます。androidTestCompile 'com.google.dexmaker:dexmaker:1.3-SNAPSHOT'
    • またはpom.xml、maven を使用してビルドする場合、またはeclipse/ant を使用している場合は上書きlibs/dexmaker.jarします~/.m2/repository/com/google/dexmaker/dexmaker/1.3-SNAPSHOT/dexmaker-1.3-SNAPSHOT.jar

また、参考までに、Google Code の同じ問題の元の問題レポートも参照してください。

于 2015-03-24T23:26:07.400 に答える
3

この問題は Android ライブラリ プロジェクトで発生しましたが、アプリケーション プロジェクトでは発生しませんでした。上記のシステム プロパティ「dexmaker.dexcache」を設定すると、問題が回避されました。Android 4.3 Nexus 4 デバイスを実行しており、19.0.3 ツールでビルドし、ターゲット API 19、私の依存関係:

androidTestCompile "org.mockito:mockito-core:1.9.5"
androidTestCompile "com.google.dexmaker:dexmaker:1.0"
androidTestCompile "com.google.dexmaker:dexmaker-mockito:1.0"
于 2014-06-01T15:17:45.163 に答える