Я пытаюсь создать тест с Robolectric. Моя цель - заменить функциональность одного класса (который, например, из библиотеки, и я не могу изменить код) из пользовательского поведения.
Я создал этот небольшой тест, чтобы имитировать то, что я хочу сделать:
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowMessenger.class})
public class TestShadow {
@Test
public void testMessenger() {
OriginalMessenger messenger = new OriginalMessenger();
String message = messenger.getMessage();
Assert.assertEquals("Shadow messenger", message);
}
public static class OriginalMessenger {
public String getMessage() {
return "Original messenger";
}
}
@Implements(OriginalMessenger.class)
public static class ShadowMessenger extends OriginalMessenger {
@Implementation
public String getMessage() {
return "Shadow messenger";
}
}
}
В примере, OriginalMessenger - это класс, который находится в библиотеке и предоставляет функциональность по умолчанию. ShadowMessenger - это класс, который содержит настраиваемое поведение, которое я хочу применить, когда я использую OriginalMessenger.
Однако, когда я запускаю тест, он терпит неудачу. Содержание сообщения - "Исходный мессенджер". Как будто ShadowMessenger никогда не использовался.
Что я делаю неправильно?