2011-06-11 13 views
32

Yani şu sınıfını alay ediyorum varsayalım:Karmaşık bir parametrede özel değerler ile alay yönteminin çağrıldığını doğrulamak için Mq'yi kullanabilir miyim?

public class ClassAParams 
{ 
    public int RequestedId { get; set; } 
    public string SomeValue { get; set; } 
} 

public class ClassA 
{ 
    public void ExecuteAction(ClassAParams executeParams) {} 
} 

Şimdi başka bir sınıf (en ClassB diyelim) olduğunu varsayalım ben bir birim test oluşturma ve ben ClassB.Execute() çağrıldığında emin olmak için , ClassBClassA.ExecuteAction() çağırır ama parametre onunla yöntem 1.

Normalde bir ClassAParams.RequestedId değerine sahip çağrıları emin olmak için, ben myMock.Verify(x => x.ExecuteAction(new ClassAParams { RequestedId = 1, SomeValue = "something" }));

p yaparak bu işi olurdu roblem, bu birim testindeki SomeValue parametresinin veya diğer ClassAParams özelliklerinin değerini kontrol etmek istemiyorum. Diğer özellikler diğer ünite testlerinde kontrol edilecek, ancak her ünite testinde doğru özelliklerle (belirli bir ünite testleri kapsamında değilken bile) ünitenin bakımını rahatsız edici hale getireceğini doğrulamak zorundadır.

Alaylı bir yönteme geçirilen yapının yalnızca belirli bir değer olarak belirli özelliklere sahip olduğunu ve geri kalanını görmezden geldiğini doğrulamak için Moq'yi kullanmanın bir yolu var mı?

cevap

60

mock.Verify için bir şey test etmenize izin veren bir aşırı yükleme var. İşte testiniz için çalışması gereken bir örnek. demektir

classA.Verify(
    a => a.ExecuteAction(
     It.Is<ClassAParams>(p => p.RequestedId == 12) 
    ) 
); 

"argüman olarak geçirilen herhangi ClassAParams için, doğrulanacak RequestId 12 eşittir".

+0

Bir çekicilik gibi çalıştık, teşekkürler! – KallDrexx

İlgili konular