AndroidでJMockを使用するにはどうすればよいですか?それは不可能だと言っている投稿がいくつかありますが、確かにそれを行う方法はありますか?
問題は、AndroidがJMockjarファイルを認識できるようにすることであるようです。では、jarをアセットに入れて、カスタムクラスローダーを作成するという解決策があるのではないでしょうか。それは大変なことのように思えますが、うまくいくように聞こえますか?
AndroidでJMockを使用するにはどうすればよいですか?それは不可能だと言っている投稿がいくつかありますが、確かにそれを行う方法はありますか?
問題は、AndroidがJMockjarファイルを認識できるようにすることであるようです。では、jarをアセットに入れて、カスタムクラスローダーを作成するという解決策があるのではないでしょうか。それは大変なことのように思えますが、うまくいくように聞こえますか?
JMockをAndroidオープンソーステストプロジェクト内で動作させています。
はい:JMockコードは手元のデバイスで実行されます;-)
私が使用した:
Android JMockテストケースについては、以下を参照してくださいhttp://github.com/olibye/ToneDial/blob/master/ToneDialTest/src/net/xpdeveloper/dialer/test/TestDialServiceTest.java
これが私が克服しなければならなかった3つの問題です:
Hamcrestの複数のパッケージは、Androidパッケージの検証に失敗します。
Android ADKで発生するエラーは次のとおりです。-最終アーカイブの生成エラー:重複エントリ:LICENSE.txt
解決
同じディレクトリにあるhamcrest-core-1.1.jarを解凍します。hamcrest-library-1.1.jarを解凍します。
この2回目の解凍により、MANIFEST.MFとLICENCE.TXTが上書きされます。
zip ../hamcrest-all-1.1.jar
最初は、JMockのSteveとNatでこれを提起しました
しかし、それは実際にはハムクレストでのジョーのパッケージングの問題です(だから私はそこに投稿しました;-)
EclipseのJUnitプラグインには、Hamcrestのサブセットが含まれています。
解決策 Eclipseプロジェクトのプロパティで、JMockの後にJUnitライブラリをクラスパスの下に移動する必要があります。
JUnit v3はandroid.jarの一部であるため、JUnit4スタイルのJMockテストを使用することはできません。まだ注釈はありません;-)
時代は変わり、@ byeoの答えは、修正と改善が行われているため、必要以上に複雑になっています。
Android Studio 3.1.4では、少なくともユニットテストでは、JMockとHamcrestを簡単に動作させることができました。build.gradleファイルに次の依存関係を追加しました。
dependencies{
....
testImplementation files('../../../../lib/jmock-2.8.3/jmock-2.8.3.jar')
testImplementation files('../../../../lib/jmock-2.8.3/jmock-junit4-2.8.3.jar')
testImplementation files('../../../../lib/jmock-2.8.3/jmock-legacy-2.8.3.jar')
testImplementation files('../../../../lib/jmock-2.8.3/objenesis-2.1.jar')
testImplementation files('../../../../lib/jmock-2.8.3/hamcrest-core-1.3.jar')
testImplementation files('../../../../lib/jmock-2.8.3/hamcrest-library-1.3.jar')
testImplementation files('../../../../lib/cglib-nodep-3.2.5.jar')
....
}
ただし、次の質問があるため、エミュレータまたは実際のハードウェアを使用するテストでJMockが正しく機能するかどうかはわかりません。