С учетом телефонного кода
List<Person> loginStaff = new List<Person>();
loginStaff.add(new Person{FirstName = "John", LastName = "Doe"});
this._iViewLoginPanel.Staff = loginStaff;
Каков синтаксис проверки того, что существует штат по имени Джон Доу и что установлен хотя бы один сотрудник? В настоящее время все примеры, которые я видел, являются довольно простыми, используя только It.IsAny или Staff = некоторый базовый тип, но ни один из них фактически не проверяет данные внутри сложных типов, таких как списки.
Мое утверждение выглядит как
this._mockViewLoginPanel.VerifySet(x=> x.Staff = It.IsAny<List<Person>>());
, который проверяет только тип, данный сеттеру, но не размер или элементы в самом списке. Я пытался сделать что-то вроде этого:
this._mockViewLoginPanel.VerifySet(
x =>
{
List<string> expectedStaffs = new List<string>{"John Doe", "Joe Blow", "A A", "Blah"};
foreach (Person staff in x.Staff)
{
if (!expectedStaffs.Contains(staff.FirstName + " " + staff.LastName))
return false;
}
return true;
});
Но это говорит о том, что тело лямбда-оператора нельзя преобразовать в дерево выражений.
Затем у меня появилась идея поместить тело оператора в функцию и запустить его, но во время выполнения я получаю:
System.ArgumentException: выражение не является вызовом установщика свойства.
Обновление:
В свете первых двух ответов на использование assert я попробовал этот метод, но обнаружил, что даже после установки Staff в ненулевой список он все равно отображается в отладке как null. Так вот как выглядит полный тест
[TestMethod]
public void When_The_Presenter_Is_Created_Then_All_CP_Staff_Is_Added_To_Dropdown()
{
this._mockViewLoginPanel = new Mock<IViewLoginPanel>();
PresenterLoginPanel target = new PresenterLoginPanel(this._mockViewLoginPanel.Object);
this._mockViewLoginPanel
.VerifySet(x => x.Staff = It.IsAny<List<Person>>());
Assert.AreEqual(5, this._mockViewLoginPanel.Object.Staff.Count);
}
И где-то внутри конструктора PresenterLoginPanel
public PresenterLoginPanel
{
private IViewLoginPanel _iViewLoginPanel;
public PresenterLoginPanel(IViewLoginPanel panel)
{
this._iViewLoginPanel = panel;
SomeFunction();
}
SomeFunction() {
List<Person> loginStaff = new List<Person>();
loginStaff.add(new Person{FirstName = "John", LastName = "Doe"});
this._iViewLoginPanel.Staff = loginStaff;
}
}
Когда я отлаживаюсь до следующей строки, this._iViewLoginPanel.Staff
равен нулю, что и вызывает пустое исключение в assert.