Robolectric ile bir test oluşturmaya çalışıyorum. Amacım, bir sınıfın (örneğin kitaplıktan gelen ve kodu değiştiremeyen) özel bir işlevin işlevselliğini değiştirebilmektir.Robolectric shadow çalışmıyor
örnekte@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 kütüphanede olup varsayılan bir işlevsellik sağlar sınıftır:
Ben ne yapmak istediğinizi simüle etmek bu küçük testi yarattı. Ve ShadowMessenger, OriginalMessenger'u her kullandığımda uygulamak istediğim özel davranışı içeren sınıftır.Ancak testi çalıştırdığımda başarısız oluyor. mesajının içeriği "Orijinal mesajlaşma" dır. ShadowMessenger hiç kullanılmamış gibi.
Neyi yanlış yapıyorum?
Neden gölge oluşturuyorsunuz? Neden "alay" veya "saplama" yapmıyorsunuz? –
Aynı sonucu, alay ve saplama kullanarak nasıl elde ederim? –
Oh, nenick sorununuzu çözdüğünü görüyor mu? Sınıfınızdan veya Spock'ten (Robospock) çıkmak için EasyMock/PowerMock'ı kullanabilirsiniz. Burada bir örnek göz atın: https://github.com/jaredsburrows/BurrowsAppsExamples/blob/master/Lib-BurrowsApps/src/test/java/burrows/apps/example/lib/utils/PlayServicesUtilsTest.java. –