Я пишу несколько тестов POJO для моего кода Android.
Я хочу запускать их локально с JDK (не с Dalvik на эмуляторе) - для скорости, JUnit 4, Mockito и для возможности безголового запуска без устройства - поэтому у меня есть отдельный проект "Java" в Eclipse .
Если метод, который я тестирую, ссылается на что-то из Android SDK, например android.util.Log
, тест не пройден - это имеет смысл, потому что android.jar
не в пути к классам. Для воспроизведения у меня есть этот контрольный пример:
public class FooTests {
@Test
public void testFoo() {
android.util.Log.d("x", "y");
}
}
Если я добавлю android.jar
явно к пути к классу тестового проекта, я получу исключения, такие как
java.lang.RuntimeException: Stub!
at android.util.Log.d(Log.java:7)
at com.example.FooTests.testFoo(FooTests.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Есть ли способ заставить код работать, не устраняя каждый последний бит зависимости Android SDK? Возможно, вычеркнутый android.jar
уже существует?
РЕДАКТИРОВАТЬ : На данный момент я закончил оборачивать классы типа android.util.Log
и вставлять их в экземпляры для классического тестирования на основе IOC. Предложение Скотта PowerMock - мой следующий шаг, когда он мне понадобится.
ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ : Робоэлектрик !