Я выделил поведение в следующий тестовый пример. Я был бы благодарен любому, кто может сказать мне, как ожидать / проверить набор свойств для свойства List<T>
- кажется, что внутри It.Is<T>(predicate)
происходит что-то, что не имеет для меня сейчас большого смысла , Пример кода будет запущен как консольное приложение из VS2008 - вам нужно добавить ссылку на Moq 2.6 (я на 2.6.1014.1) - пожалуйста, попробуйте раскомментировать различные операторы ExpectSet, чтобы увидеть, что происходит ...
using System;
using Moq;
using System.Collections.Generic;
namespace MoqDemo {
public interface IView {
List<string> Names { get; set; }
}
public class Controller {
private IView view;
public Controller(IView view) {
this.view = view;
}
public void PopulateView() {
List<string> names = new List<string>() { "Hugh", "Pugh", "Barney McGrew" };
view.Names = names;
}
public class MyApp {
public static void Main() {
Mock<IView> mockView = new Mock<IView>();
// This works - and the expectation is verifiable.
mockView.ExpectSet(mv => mv.Names);
// None of the following can be verified.
// mockView.ExpectSet(mv => mv.Names, It.Is<Object>(o => o != null));
// mockView.ExpectSet(mv => mv.Names, It.Is<List<string>>(names => names.Count == 3));
// mockView.ExpectSet(mv => mv.Names, It.IsAny<IList<String>>());
Controller controller = new Controller(mockView.Object);
controller.PopulateView();
try {
mockView.VerifyAll();
Console.WriteLine("Verified OK!");
} catch (MockException ex) {
Console.WriteLine("Verification failed!");
Console.WriteLine(ex.Message);
}
Console.ReadKey(false);
}
}
}
}