2012-05-31 19 views
24

Genel bir şekilde bir alay üzerinde tüm yöntem çağrıları engellemek mümkün mü?Mockito - Sahte üzerinde herhangi bir yöntem çağırma engelleme

Örnek

gibi bir satıcı Resim sınıfı verilen:

public class VendorObject { 

    public int someIntMethod() { 
     // ... 
    } 

    public String someStringMethod() { 
     // ... 
    } 

} 

I-yeniden yönlendirir tüm yöntem yöntem eşleştirme başka bir sınıfa çağıran bir mock yaratmak istiyoruz imzalar:

Ne zaman() oAnswer() construc Mockito'daki t faturaya uyuyor gibi görünüyor, ancak herhangi bir yöntemle herhangi bir yöntem çağrısını eşleştirmenin bir yolunu bulamıyorum. InvocationOnMock kesinlikle bana tüm detayları veriyor. Bunu yapmak için genel bir yolu var mı? (. Vo *) uygun olduğunda koduyla değiştirilir nerede bu gibi görünecektir şey: kolay alay yapmak için satıcı sınıfları etrafında

VendorObject vo = mock(VendorObject.class); 
when(vo.anyMethod(anyArgs)).thenAnswer(
    new Answer() { 
     @Override 
     public Object answer(InvocationOnMock invocation) { 

      // 1. Check if method exists on RedirectToObject. 
      // 2a. If it does, call the method with the args and return the result. 
      // 2b. If it does not, throw an exception to fail the unit test. 

     } 
    } 
); 

ekleme sarmalayıcıları bir seçenek değildir çünkü:

  1. Mevcut bir kod tabanı çok büyük.
  2. Son derece performanslı kritik uygulamaların bir parçası. Tabii

    VendorObject vo = mock(VendorObject.class, new Answer() { 
        @Override 
        public Object answer(InvocationOnMock invocation) { 
    
         // 1. Check if method exists on RedirectToObject. 
         // 2a. If it does, call the method with the args and return the 
         // result. 
         // 2b. If it does not, throw an exception to fail the unit test. 
    
        } 
    }); 
    

    , sık bu yaklaşımı kullanmak istiyorsanız, Yanıt gerek anonim olmak:

+0

o kadar basit deme sakın zaman (vo) .thenAnswer (...): Ey – Karle

+0

"son derece kritik uygulamalarda performans parçası." Bir sahte/proxy nesnesinin bu durumda bir sarıcı eklemekten farklı olması nasıl eklenir? Bunu sadece birim testi veya gerçek uygulamada yapmakla ilgileniyor musunuz? –

+0

@mattb: Performans yönü, sarıcı sınıflarını kullanmaya karşı en büyük argüman değildir. Orijinal satıcı nesnesine ve gerçek satıcı nesnesine istek ileten bir uygulama sınıfına dayalı bir arayüz oluşturacağız. Bunun için yürütme süresi, işi yapan asıl satıcı nesnesine kıyasla küçük olacaktır. Daha önemli argüman, doğrudan satıcı nesnelerini kullanan mevcut kod tabanıdır. – Karle

cevap

39

Ben ne istediğini olduğunu düşünüyorum.

documentation'dan: "Oldukça gelişmiş bir özellik ve genellikle iyi bir test yazmak için buna ihtiyacınız yok. Ancak eski sistemlerle çalışırken yararlı olabilir." Senin gibi görünüyor.

İlgili konular