Как использовать jMock ClassImposteriser для модульного тестирования Android? - PullRequest
2 голосов
/ 24 мая 2011

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

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);
    }};

    ...
}

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

1 Ответ

3 голосов
/ 24 июля 2011

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

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

Некоторые дополнительные сведения об ограничениях давлика:

...