2011-11-08 23 views
11

kullanarak her çağrıldığında Mock yeni bir liste döndürür Beklenen bir dönüş listesi ile bir yöntem çağrısı alay etmek için MOQ kullanıyorum. Benim yöntemim bir liste döndürür ancak yöntemin her çağrılmasında alayın yeni bir liste oluşturmasını istiyorum. Bugüne kadar yaptığım Ne: Ben başarmak için çalışıyorum neNasıl yapılır Mock

List<Correlation> expected = new List<Correlation> { new Correlation() { Code = "SelfError1" }, new Correlation() { Code = "SelfError2" } }; 
Mock<IRPLValidator> selfMock = new Mock<IRPLValidator>(); 
selfMock.Setup(f => f.Validate()).Returns(expected); 

sahte dönüş Yeni bir liste yöntemi olsun denilen en her zaman yapmaktır. Bu denedim ama işe yaramadı:

bu çalıştı olmadı gibi
selfMock.Setup(f => f.Validate()).Returns(new List<Correlation>{ new Correlation() { Code = "SelfError1" }, new Correlation() { Code = "SelfError2" } }); 

, düşünüyorum da belki geri arama Sorumun cevabı ama benim liste reinitializing için herhangi uygun bir örnek bulamadık . Herhangi bir öneriniz var mı?

Her seferinde neden yeni bir listeye ihtiyacım olduğunu merak edebileceğiniz gibi, sorun, nesne türüne bağlı olarak listede bazı değişiklikler yaparak farklı nesne türlerinde yöntemi çağırmamdır. Sahte, yöntem her çağrıldığında bana aynı liste verdiğinden, her zaman aynı nesneyi bellekte değiştiriyorum, böylece üzerinde yaptığım değişiklikleri takip edemiyorum.

Şimdiden teşekkürler!

cevap

14
selfMock.Setup(f => f.Validate()).Returns(() => new List<Correlation>{ new Correlation() { Code = "SelfError1" }, new Correlation() { Code = "SelfError2" } }); 

İade içindeki değeri bir işleve dönüştürmeniz gerekir. Denediğiniz sürüm tek bir liste oluşturdu, ardından geri döndü. Böylelikle, liste her seferinde, gerektiğinde geri dönüş fonksiyonunu çağırdığı için oluşturulur.

+0

Bir çekicilik gibi çalıştım! Çok çok teşekkürler. Bu çok kolaydı. –

+0

Teşekkür ederim - bir gün bu bütün kapanma şeyini alacağım. – David

+0

Keşke bunu daha önce bulabilirdim, dün bir gün boşa harcadım, neden listemin neden güncellenmediğini merak ettim! Teşekkürler!!! – PmanAce

2

İade böylece belirtebilirsiniz, giriş parametresi olarak bir Func <> (ve çeşitli aşırı yükleri) temsilci alır sadece yürütülecektir da işlevlerini parametre olarak döndürülür fakat edilecektir İade yöntemiyle içindeki bazı verileri ve sonucu işlev geri döndürülecek. Rangoric tarafından sağlanan çözüm, sizin durumunuzda iyi çalışacaktır.

+0

Açıklama için teşekkürler! –