#android #android-emulator #mocking #robolectric
#Android #android-эмулятор #издевательство #robolectric
Вопрос:
OOTB, Robolectric не так хорошо поддерживает локали. Поэтому, если ваше приложение зависит от локали (как и многие приложения, если они i18n’nd должным образом), это может быть настоящей проблемой. Короче говоря, я создал свой собственный ShadowFooGeocoder и ShadowFooAddress, которые позволяют мне имитировать язык, который я хочу. По сути, это повторные реализации существующих теней.
Однако, когда я привязываю свой класс как таковой: bindShadowClass(ShadowFooGeocoder.class), это отлично работает. Во время выполнения возвращается правильная тень. Проблема в том, что я хочу настроить моделирование для этого объекта, но я не уверен, как это сделать. shadowOf (экземпляр), где экземпляр является внедренным геокодером, возвращает ShadowGeoCoder. Я пробовал работать напрямую с ShadowWrangler, но это также возвращает ShadowGeocoder.
Как я могу получить доступ к моему затененному классу, который я связал с помощью вызова bindShadowClass (…), чтобы я мог установить свои ожидания (симуляции)?
Примечание: Это репост того же вопроса в группе Robolectric здесь. Я разместил здесь, потому что мой процент успеха в том, чтобы заставить кого-либо ответить на вопросы в группе, довольно низок. Я надеюсь на лучший результат здесь.
Ответ №1:
Что я в основном сделал здесь, так это расширил ShadowGeocoder следующим образом:
@SuppressWarnings({"UnusedDeclaration"})
@Implements(Geocoder.class)
public class ShadowFooBarGeocoder extends ShadowGeocoder {
// implementation stuff
}
Затем я бы привязал его с помощью bindShadowClasss (…), и когда я восстанавливаю тень с помощью статического вызова shadowOf (…), я получаю обратно «ShadowGeocoder», который является экземпляром ShadowFooBarGeocoder. Затем я приведу его к этому типу и выполню любую необходимую мне работу.
Комментарии:
1. Похоже, подход bindShadowClasss не будет работать с последней версией robolectric. Не могли бы вы предложить, каким мог бы быть новый подход?