Пользовательский теневой объект Robolectric

OOTB, Robolectric не очень хорошо поддерживает локали. Поэтому, если ваше приложение зависит от локалей (как и многие приложения, если они корректно настроены), это может стать настоящей головной болью. Короче говоря, я создал свои собственные ShadowFooGeocoder и ShadowFooAddress, которые позволяют мне имитировать желаемую локаль. По сути, это повторная реализация существующих теней.

Однако, когда я привязываю свой класс как таковой: bindShadowClass(ShadowFooGeocoder.class), это прекрасно работает. Во время выполнения возвращается правильная тень. Проблема в том, что я хочу настроить симуляции на этом объекте, но не знаю, как это сделать. shadowOf(instance), где instance является внедренным GeoCoder, возвращает ShadowGeoCoder. Я пробовал работать напрямую с ShadowWrangler, но он также возвращает ShadowGeocoder.

Как я могу получить свой затененный класс, который я связал через вызов bindShadowClass(...), чтобы я мог установить свои ожидания (симуляции)?

Примечание. Это репост того же вопроса в группе Robolectric здесь. . Я написал здесь, потому что мой уровень успеха в том, чтобы заставить кого-либо ответить на вопросы в группе, довольно низок. Я надеюсь на лучший результат здесь.


person Donn Felker    schedule 07.06.2011    source источник


Ответы (1)


Что я в основном сделал здесь, так это расширил ShadowGeocoder следующим образом:

@SuppressWarnings({"UnusedDeclaration"})
@Implements(Geocoder.class)
public class ShadowFooBarGeocoder extends ShadowGeocoder {
  // implementation stuff
}

Затем я бы привязал его с помощью bindShadowClasss(...), и когда я получаю тень с помощью статического вызова shadowOf(...), я возвращаю "ShadowGeocoder", который является экземпляром ShadowFooBarGeocoder. Затем я привожу его к этому типу и выполняю любую работу, которая мне нужна.

person Donn Felker    schedule 04.04.2012