Robolectric Custom Shadow Object - PullRequest
       8

Robolectric Custom Shadow Object

2 голосов
/ 08 июня 2011

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

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

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

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

1 Ответ

0 голосов
/ 04 апреля 2012

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

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

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

...