2015-01-29 10 views
6

ben saplama istiyorum aşağıdaki imzası ile bir yöntemi vardır:Tür hakkında umurumda değilken genel bir yöntem eklemek için Rhino Mocks kullanmak mümkün mü?

async Task<T> MyMethod<T>(SomeClass, bool, string, string, string, params object[]) 

genel tür, T, biz yöntemi dönmek bekliyoruz türüdür (veri sunucusundan döndürülen artığını T tipi. Geçirilen parametrelerden çıkarılamayacağını unutmayın; her seferinde belirtilmelidir.

Bu yöntem için Rhino Mocks uygulamasında bir stub oluşturmam gerekiyor, ancak genel türü sağlamayı bekliyor. Herhangi bir türle görüşme yapmak isterim. <object> kullanmayı denedim, ancak daha sonra bu tür bir arama ile bekler.

Bunun neden bir sorun olacağını anlıyorum çünkü genel türlere yapılan çağrılar çalışma zamanında değil derleme zamanında ele alınır.

Yine de bir hile eksik durumda diye sormaya değer olacağını düşündüm.

düzenleme 1

ben kendisini genel yöntemdir bir yardımcı yönteminde benim saplama oluşturucu sarılmış ettik sayede şimdilik geçici bir çözüm uyguladığınızı dahil olması gerekirdi.

Bununla ilgili bir sorun, bununla birlikte, bu türünü belirtmem ve daha sonra yalnızca bu tür için yiyecek ve içecek sağlamak zorunda olduğumdur. Test edilen sistem, sapladığım yönteme birkaç çağrı yapabilir ve her tür için hitap eden 'hepsini yakala' seçeneğine ihtiyacım var.

Düzenleme 2

Benim geliştirilmiş geçici çözüm Rhino dalga geçer hiç kullanmayan olmuştur. Bunun yerine, arayüzü uygulayan bir alay sınıfı kullanıyorum. Bu, jenerik yöntemin uygulanmasını ve varsayılan bir değeri (veya yapım sırasında ayarlanmış olanı) döndürmeyi kolaylaştırır. Yine de Rhino Mocks'ta mümkün olup olmadığını bilmek isterim!

cevap

0

Sen genel yöntemde saplama oluşturmayı deneyin ve sadece gibi pek verilen türde bir varsayılan örneğini geri dönebilirler:

static void SetUpAStub<T>() 
     where T : new() 
    { 
     var stub = MockRepository.GenerateStub<IMyInterface>(); 
     stub.Stub(i => i.MyMethod<T>(null, false, string.Empty, string.Empty, string.Empty)) 
      .Return(new TaskFactory().StartNew(() => new T())); 
    } 
+0

Bu benim geçici bir çözüm olarak ne yaptık, ama sistem Test altında, farklı türler için birkaç çağrı yapabilir ve her birinin istisna olmaması için mahsur edilmesi gerekecektir. İşte bu yüzden 'hepsini yakala' şartına ihtiyacım var. Üzgünüm - bunu soruma dahil etmeliydim. –

İlgili konular