私は同じ機能について考え、CGLib を直接ではなく、Mockito フレームワークを介して自分で実装することになりました。Mockito を Android で使用するツールを簡単に移植できるように、誰かが Android Java プラットフォームで Mockito を有効にしたと聞きました。しかし、私の知る限り、現時点では CGLib や Javaassit に依存する機能を移植することはできません。
2 つのモードを持つ「 bimock」(双方向モック)という名前のツールをオープンソース化しました。記録モードでは、メソッド呼び出しと戻り値または例外を JSON 形式のリソース ファイルに記録します。再生モードでは、起動時にリソース ファイルからメソッド呼び出しと応答を設定し、リターンまたはスローの応答を再生します。Java オブジェクトのパブリック メソッドの応答を記録し、JSON ファイルから再生するこの例を参照してください。
このツールは、Amazon AWS SDK オブジェクトだけでなく、HashMap、ArrayList、ByteBuffer などの JDK オブジェクトに対するさまざまな依存関係に対しても使用できるはずです。
public class BimockTest {
private Mode mode = Mode.Replay;
private PojoMapper pojoMapper = new PojoMapper(new BimockModule());
private Bimock bimock = new Bimock(pojoMapper);
@Test
public void testRecordAndReplayMap() throws IOException {
val map = bimock.of(new HashMap<String, Integer>(), mode, new File("src/test/resources/test-record-and-replay-map.json"));
assertThat(map.put("abc", 3), equalTo(null));
assertThat(map.size(), equalTo(1));
assertThat(map.get("abc"), equalTo(3));
}
@Test
public void testRecordAndReplayList() {
List<Long> list = new ArrayList<Long>();
list = bimock.of(list, mode, new File("src/test/resources/test-record-and-replay-list.json"));
try {
assertThat(list.remove(-1), nullValue());
fail();
} catch (ArrayIndexOutOfBoundsException e) {
assertThat(e.getMessage(), equalTo("-1"));
}
assertThat(list.add(100L), equalTo(true));
assertThat(list.toArray(new Long[1]), equalTo(new Long[] { 100L }));
}
}