2010-01-04 12 views
6

Rhinomocks'ı kullanarak, bir Mock/Stub'un hiç çağrılmadığını nasıl doğrulayabilirim? Sahte/saplama üzerinde hiçbir yöntem çağrılmadı mı?Rhinomocks, bir saplama/alayın hiç çağrılmadığını nasıl doğrulayacak?

Ben AssertWasNotCalled yönteminin farkındayım, ancak bu yöntem bir yöntem adı söz gerektirir. (Belki de 10 farklı yönteme sahip bir sınıfım var).

Log.AssertWasNotCalled(x => x.LogAndReportException(null, null), x => x.IgnoreArguments()); 

cevap

1

Sen sıkı bir alay oluşturmak için StrictMock yöntemi kullanabilirsiniz - Herhangi unexcepted yöntem çağrısı kullanılıyorsa, bu başarısız olur. Ayende's site'a göre, bu cesaret kırılmamış, ancak tam olarak faydalı olacağı senaryo gibi görünüyor. Eğer mocks kullanırken

1

, sen her arama yapıldığında ya da değildi iddia etmemelidir. Bu, testlerinizi belirli bir uygulamaya koyar ve onları kırılgan ve refakat eden bir kabus yapar.

şimdiye kadar ki bir bağımlılık hiç kullanılmamıştır iddia neden istediğini düşünmek istiyorum bu duruma koştu edin. bağımlılık yerde kullanılmadığı takdirde

Açıkçası, sadece çıkarın. Eğer bazı operasyonlar için gerekliyse, fakat bağımlılıktaki tüm operasyonlar yıkıcı operasyonlardır ve bazı işlemlerin bunlarla ilgili bir zarar vermediğinden emin olmak istiyorsanız, yıkıcı işlemlerin çağrılmadığını ve uygulamanın yapılmasına izin verdiğinizi açıkça belirtmelisiniz. tahribatsız operasyonlarda ne olursa olsun (varsa). Bu, testlerinizi daha açık ve daha az kırılgan yapar. Bu gelecekte uzağa gidebilir bir özelliktir Hintçe

+0

1 Ben Kırılgan Testler geldiğinde özellikle, kabul ediyorum. Ancak, bu geçerli bir talep olabilir. Metot Enjeksiyonu ile bir arayüz düşünün. Arabirimdeki bir yöntem enjekte edilen soyut bir parametre aldığından, bir şey sağlamanız gerekir. Şimdi, bu arayüzün 'boş' bir uygulamasını yarattığınızı ve gereksinimin enjekte edilen parametrenin (arayüzden dolayı mevcut olması gerektiği) hiçbir zaman kullanılmadığını varsayalım. Bir niş senaryo biraz, itiraf ediyorum, ama yine de alakalı :) –

+0

@ Mark: evet, bu kabul edilebilir bir kullanım. Faydalı olabileceği bazı köşe davası olduğunu biliyordum, sadece bir tane ile gelemedim. –

+1

Bir güvenlik görevlisi üzerinde birim testi, yöntem içindeki bağımlılıkların aranmadığından emin olmak için iyi bir yer değil mi? Şu anda bu güvenlik senaryosu için bir güvenlik görevlisi yazıyordum, burada güvenlik maddesi istediği gibi çalışıyor ve sahte hiç çağrılmadı. – Maslow

6

Sen, bir Sıkı alay kullanabilirsiniz:

var mocks = new MockRepository(); 
var cm = mocks.StrictMock<ICallMonitor>(); 
cm.Replay(); 

cm.HangUp(); // this will cause VerifyAllExpectations to throw 
cm.VerifyAllExpectations(); 

Bu sözdiziminde, bir Strick Mock sadece açıkça tanımlanmış çağrı verilebilir. Genelde

+0

Eğer bu doğru bir şekilde anlıyorsam, bu senaryoda/Replay' ve HangUp’in ikisi de doğrulamanın yapılmasına neden olmaz mı? – Maslow

+2

@Maslow: no. 'Replay', sahneyi tekrar oynatma moduna sokan Rhino Mocks eklenti yöntemidir. Kayıt modundayken ve üzerinde herhangi bir çağrı yapılmadı. Tekrarlama moduna girdiğinde, tam olarak buna izin verir: üzerinde arama yapılamaz. '; Sonra' mocks.VerifyAll() '; ı uzatma yöntemi eksik veya bu farklı bir sürümden olmadıkça –

+0

ah, benim kodda bunun' mocks.Replay (cm) idi – Maslow

İlgili konular