Учитывая вызывающий кодпроверки списка, используя малое количество заказа
List<Person> loginStaff = new List<Person>();
loginStaff.add(new Person{FirstName = "John", LastName = "Doe"});
this._iViewLoginPanel.Staff = loginStaff;
Что такое синтаксис для проверки того, что существует персонал по имени John Doe, и что есть по крайней мере один сотрудник был установлен? В настоящее время все примеры, которые я видел, довольно простые, используя только 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: Expression не является свойством сеттер вызова.
Update: В свете первых двух ответов использовать утверждают, я попробовал этот метод, но обнаружил, что даже после установки Staff с не список нулевой, он по-прежнему отображается в отладочных как нулевое. Так что это как полный тест выглядит
[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
равно нулю, который является то, что причиной исключения нулевого в утверждают ,
Вы назначая конструктор параметр переменной класса? –
да, я назначаю параметр this._mockViewLoginPanel.Object для переменной this._iViewLoginPanel – Joe
Можете ли вы вставить строку кода в конструктор, который это делает? –