给定调用代码
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>>());
这段代码只检查了给setter的类型,但没有检查列表本身的大小或项目。我尝试做出以下更改:
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;
});
但这告诉我lambda语句体无法转换为表达式树。然后我想到将语句体放入函数中并运行该函数,但在运行时我得到以下错误:
System.ArgumentException: 表达式不是属性设置器调用。
更新: 考虑到前两个答案使用assert,我尝试了这种方法,但发现即使将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
为空,这就是导致assert中的空异常。