Я думал об одной и той же функциональности и в конечном итоге реализовал ее самостоятельно над картой Mockito, а не CGLib. Я слышал, что кто-то разрешил Mockito на платформе Android Java, так что я могу легко переносить свой инструмент, который использует Mockito на Android. Но, насколько я знаю, мы не можем переносить любую функцию, которая зависит от CGLib или Javaassit в это время.
У меня есть открытый инструмент с именем 'bimock' (двунаправленный макет), который имеет два режима. В режиме записи он записывает вызовы методов с возвращаемыми значениями или исключениями в файл ресурсов в формате JSON. Когда он находится в режиме воспроизведения, он устанавливает вызовы методов и ответы из файла ресурсов при запуске и повторяет ответы возвратов или бросков. См. Этот пример, где я записываю публичные ответы объекта Java и реплицирует их из файла JSON.
Вы должны иметь возможность использовать этот инструмент для различных зависимостей не только для объекта Amazon AWS SDK, но и для объектов JDK, таких как HashMap, ArrayList, ByteBuffer и т. П.
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 }));
}
}
Почему бы вам когда-нибудь захотеть издеваться над любым из классов в примере, когда вы можете просто использовать их? Как то, что Стив сказал ниже, вы просто создаете действительно хрупкие тесты, которые дублируют вашу производственную логику – tddmonkey