Как мне использовать ClassImposteriser от JMock для модульного тестирования Android?

#android #unit-testing #tdd #jmock

#Android #модульное тестирование #tdd #jmock

Вопрос:

В моем модульном тестировании я попробовал следующее:

 import org.jmock.Mockery;
import org.jmock.Expectations;
import org.jmock.lib.legacy.ClassImposteriser; 

public class MyActivityTest extends ActivityUnitTestCase<MyActivity> {
    private Mockery context = new Mockery() {{
        setImposteriser(ClassImposteriser.INSTANCE);
    }};

    ...
}
  

Мое предполагаемое использование — имитировать подкласс приложения моего проекта. Однако, когда я запускаю свои тесты, я получаю java.lang.Ошибка ExceptionInInitializerError. Могу ли я не использовать расширение ClassImposteriser для запуска модульных тестов Android?

Комментарии:

1. В качестве альтернативы, должен ли я использовать другой фреймворк mocking?

Ответ №1:

Это то, что я подробно изучил несколько месяцев назад. К сожалению, виртуальная машина dalvik в настоящее время не поддерживает манипуляции с байт-кодом, которые требуются для моделирования конкретных классов.

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

Немного подробнее об ограничениях davlik: