Итак, я работаю над этим небольшим проектом, который использует Dagger 2 для инъекций зависимостей и Realm как базу данных.Модульное тестирование Realm + Dagger 2 с Robolectric & Mockito
Я тестирую устройство с помощью Robolectric и Mockito (с Powermock). Из предыдущих исследований (и много боли) я понял, что тестирование Realm довольно трудоемко, но было сделано в прошлом here.
Теперь мой проект имеет очень похожую настройку и структуру, связанную выше.
Когда я бегу мои модульных тестов, все они проходят за исключением одного, что дает мне очень зашифрованное сообщение, которое выглядит следующим образом:
java.lang.NullPointerException
at org.robolectric.internal.ShadowExtractor.extract(ShadowExtractor.java:5)
at org.robolectric.Shadows.shadowOf(Shadows.java:1190)
at org.robolectric.shadows.CoreShadowsAdapter.getMainLooper(CoreShadowsAdapter.java:37)
at org.robolectric.util.ComponentController.<init>(ComponentController.java:31)
at org.robolectric.util.ComponentController.<init>(ComponentController.java:23)
at org.robolectric.util.ActivityController.<init>(ActivityController.java:40)
at org.robolectric.util.ActivityController.of(ActivityController.java:32)
at org.robolectric.Robolectric.buildActivity(Robolectric.java:82)
at org.robolectric.Robolectric.buildActivity(Robolectric.java:78)
at org.robolectric.Robolectric.setupActivity(Robolectric.java:86)
at uk.co.placona.tradesafe.view.EditActivityTest.ActivityShouldNotBeNull(EditActivityTest.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:68)
at org.powermock.modules.junit4.internal.impl
Строка кода, указанного на ошибки выше:
activity = Robolectric.setupActivity(EditActivity.class);
Активность существует, и в нее вводится TradeRepository, когда она запускается.
Указанный вид деятельности можно найти here вместе с остальной частью кода. Я пытался отладить это в течение 3 дней без успеха. Каждый отдельный тестовый тест, который я создаю, отлично работает, за исключением любого модульного теста, который используется Activity, что заставляет меня думать, что я, вероятно, отсутствует что-то действительно очевидное.
Буду рад прояснить любые вопросы здесь. С большим спасибо!
Вы запускаете его с помощью PowerMock? –
Да, как вы можете видеть здесь: https://github.com/mplacona/trade-safe/blob/master/app/src/test/java/uk/co/placona/tradesafe/view/EditActivityTest.java –
Да , уже проверено.Это всегда сложно с «PowerMock» –