Ich versuche, einen Test mit Robolectric zu erstellen. Mein Ziel ist es, in der Lage zu sein, die Funktionalität einer Klasse (die zum Beispiel aus einer Bibliothek kommt und ich den Code nicht ändern kann) durch ein benutzerdefiniertes Verhalten zu ersetzen.Robolectric Schatten funktioniert nicht
Ich habe diesen kleinen Test zu simulieren, was ich tun möchte:
@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";
}
}
}
Im Beispiel OriginalMessenger die Klasse, die in der Bibliothek und stellt eine Standardfunktionalität. Und ShadowMessenger ist die Klasse, die das benutzerdefinierte Verhalten enthält, das ich anwenden möchte, wenn ich OriginalMessenger verwende.
Allerdings, wenn ich den Test ausführen, schlägt es fehl. Der Inhalt von Nachricht ist "Original Messenger". Als ob der ShadowMessenger nie benutzt wurde.
Was mache ich falsch?
Warum einen Schatten machen? Warum nicht "mock" oder "stub" es aus? –
Wie erreiche ich das gleiche Ergebnis mit Mocks und Stubs? –
Oh ich sehe nenick dein Problem gelöst? Sie können EasyMock/PowerMock verwenden, um aus Ihrer Klasse herauszuspielen oder Spock (Robospock). Hier ein Beispiel: https://github.com/jaredsburrows/BurrowsAppsExamples/blob/master/Lib-BurrowsApps/src/test/java/burrows/apps/example/lib/utils/PlayServicesUtilsTest.java. –