Использование JMock на Android

Как я могу использовать JMock на Android? В нескольких сообщениях говорится, что это невозможно, но, конечно, есть какой способ сделать это?

Проблема, похоже, заключается в том, чтобы Android даже распознал файл jar JMock. Так, может быть, есть решение поместить банку в активы и создать собственный загрузчик классов? Кажется, это большая проблема, но похоже ли, что это сработает?


person Ron Romero    schedule 27.08.2010    source источник


Ответы (2)


У меня JMock работает в тестовых проектах Android с открытым исходным кодом.

Да: код JMock выполняется на устройстве в вашей руке ;-)

Я использовал:

  • jmock-2.5.1.jar
  • Переупаковал hamcrest-all-1.1.jar (объясню)
  • jmock-junit3-2.5.1.jar

См. Следующий пример теста Android JMock http://github.com/olibye/ToneDial/blob/master/ToneDialTest/src/net/xpdeveloper/dialer/test/TestDialServiceTest.java

Вот три проблемы, которые мне пришлось преодолеть:


Упаковка Hamcrest

Множественная упаковка Hamcrest не проходит проверку пакета Android.

Ошибка, которую вы получаете в Android ADK: - Ошибка создания окончательного архива: повторяющаяся запись: LICENSE.txt.

Решение

распаковать hamcrest-core-1.1.jar распаковать hamcrest-library-1.1.jar в тот же каталог.

Это второе разархивирование перезаписывает файлы MANIFEST.MF и LICENCE.TXT.

zip ../hamcrest-all-1.1.jar

Изначально я поднял этот вопрос со Стивом и Нэтом для JMock.

Однако на самом деле это проблема упаковки Джо в Hamcrest (поэтому я просто разместил ее там ;-)


Упаковка JUnit

Плагин JUnit в eclipse содержит подмножество Hamcrest.

Решение. Вам необходимо переместить библиотеку JUnit по пути к классам после JMock в свойствах проекта eclipse.


Упаковка Android

JUnit v3 является частью android.jar, поэтому вы не можете использовать тесты JMock в стиле JUnit 4. Для нас пока нет аннотаций ;-)

person byeo    schedule 12.10.2010

Времена изменились, и ответ @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 правильно работать в тестах, использующих эмулятор или реальное оборудование, из-за этого вопроса:

JMock-файлы не работают в тесте Android проект (проект не строится)

person Stephen M -on strike-    schedule 23.10.2018