На самом деле мне нужно получить ответ на вызов API, для этого мне нужно Context
.
robolectric
user1667968
источник
источник
RuntimeEnvironment.application
статический код (например, методы,@BeforeClass
помеченные значком), поскольку Robolectric, вероятно, не будет инициализирован в этот момент, а значение будетnull
.Ты можешь использовать
источник
Использовать это:
источник
Добавить
И используйте:
источник
Для последней версии Robolectric 4.3 на данный момент в 2019 г.
`и
оба изношены. Итак, я использую
чтобы получить Context.
источник
Чтобы получить контекст приложения, вы должны сделать следующее:
источник
У меня это работает с Robolectric 3.5.1:
ShadowApplication.getInstance().applicationContext
источник
RuntimeEnvironment.application
илиRuntimeEnvironment.application.getApplicationContext()
если он работает для вас.В выпуске 4.0-alpha-3 от 21 июля они удалены
ShadowApplication.getApplicationContext()
. ИспользуйтеRuntimeEnvironment.application.getApplicationContext()
для любых тестов, помеченных@RunWith(RobolectricTestRunner::class)
.Кроме того, в их текущем руководстве есть пример получения строковых ресурсов с использованием:
(Обратите внимание, что документация javadocs для
RuntimeEnvironment
и вShadowApplication
настоящее время отражает не-альфа-версию 3.x.)источник
Сначала добавьте в свой
build.gradle
:testImplementation 'androidx.test:core:1.2.0'
затем используйте:
ApplicationProvider.getApplicationContext() as Application
источник
В некоторых случаях вам может потребоваться контекст вашего приложения вместо контекста по умолчанию Robolectris. Например, если вы хотите получить имя вашего пакета. По умолчанию Robolectric вернет вам
org.robolectric.default
название пакета. Чтобы получить настоящее имя пакета, сделайте следующее:build.gradle
testImplementation 'org.robolectric:robolectric:4.2.1'
Ваш тестовый класс:
Убедитесь, что в вашем рабочем каталоге Run / Debug Configurations установлено значение: $ MODULE_DIR $
источник
Безопаснее использовать
Robolectric.getShadowApplication()
вместоRobolectric.application
прямого использования .источник
Robolectric.application
Согласен с ответами @EugenMartynov и @rds ....
Быстрый пример можно найти на Volley-Marshmallow-Release
в NetworkImageViewTest.java
// mNIV = new NetworkImageView(Robolectric.application); mNIV = new NetworkImageView(RuntimeEnvironment.application);
Ссылка Volley доступна https://android.googlesource.com/platform/frameworks/volley/+/marshmallow-release
вам нужно добавить зависимости в модуле волейбола в студии Android как:
dependencies { testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-core:1.10.19' testCompile 'org.robolectric:robolectric:3.1.2' }
источник
В вашем случае, я думаю, вам следует помнить о том, что вы на самом деле тестируете. Иногда возникновение проблем с непроверяемым кодом или кажущимся непроверяемым кодом является признаком того, что, возможно, ваш код нуждается в рефакторинге.
Для ответа на вызов API вы можете не захотеть тестировать сам вызов API. Возможно, нет необходимости проверять возможность отправки / получения информации от любой произвольной веб-службы, а скорее то, что ваш код обрабатывает и обрабатывает ваш ответ ожидаемым образом.
В этом случае может быть лучше провести рефакторинг кода, который вы пытаетесь протестировать. Разделите синтаксический анализ / обработку ответов на другой класс, который принимает простой,
String
и проведите тестирование этого класса , введя образцы строковых ответов.Это более или менее соответствует идеям единой ответственности и инверсии зависимостей ( S и D в SOLID )
источник
Хорошо, поэтому я знаю, что многие другие говорили этот ответ раньше и, возможно, уже устарели
Я получил null, потому что часть when () была ПОСЛЕ инициализации sut. Это может помочь некоторым из вас.
также у меня есть
в начале урока
Также
источник