2012-03-14 12 views
16

:Moq VerifySet (Eylem) değiştirerek eskimiş ifade derleme hatası

[Test] 
public void OnSearchRequest_ViewFiresEvent_EventIsHandled() 
{ 
    // Arrange 
    Mock<IViewUsers> view = new Mock<IViewUsers>(); 
    Users users = new Users(view.Object); 

    // Act 
    view.Raise(v => v.SearchForUsers += null, this, new SearchEventArgs()); 

    // Assert 
    view.VerifySet(v=> v.SearchResult = It.IsAny<List<IUser>>()); 

} 

başlangıçta vardı:

Moq how to replace obsolete expression

ben şu var

 // Assert 
     view.VerifySet(v => v.SearchResult); 

Ama şu uyarıyı alıyordu:

'Moq.MockExtensions.VerifySet (Moq.Mock, System.Linq.Expressions.Expression>)' artık kullanılmıyor: Ben soruyu buldum

'VerifySet (Eylem) tarafından değiştirildi' yukarıda atıfta bulunulan ve VerifySet için çağrı içinde, "v.SearchResult" zor hata o maç için, ama şimdi HALA o uyarıyı alıyorum ve bunun üzerine değiştirildi:

bir ifade ağaç may bir görev operatörü içermez.

Bunu yanlış biçimlendirdiğimi göremiyorum - öyleyse neden başka bir sorunun olması gerektiği gibi bir eylem olarak bunu fark etmiyor?

+0

Hangi Moq sürümünü kullanıyorsunuz? Çünkü 4.0.10827.0 ile küçük bir repro oluşturdum ve eski bir uyarı olmadan yeşil ve derleme yapıyor ... Testinizdeki sınıfların nasıl göründüğüne daha fazla bağlam sağlamalısınız. – nemesv

+0

moq 4.0.10827.0 –

+0

Daha fazla içerikten hangisini istiyorsunuz? –

cevap

0

Yardımcı olup olmadığını bilmiyorum, ancak geçmişte It.IsAny<> listelerini kullanarak sorun yaşadım. It.Is<List<IUser>>(l => l != null) gibi bir şey deneyebilir misin?

1

Sorduğun şeylere nispeten yakın bir şey buldum. Moq how to replace obsolete expression Bunun işe yarayıp yaramadığını bilmiyorum çünkü sadece mock.Setup ve mock.Verify kullanıyorum.

Ayrıca, daha önce bahsedildiği gibi, It.IsAny numaranızdaki lambda ifadelerini kullanmayı deneyin. Doğrulama başarısız olursa, tam olarak nerede başarısız olduğunu bilersiniz. Özellikle belirli bir pozisyonda bir değer bekliyorsanız, örneğin.