11 c# collections unit-testing assert xunit
我有一个类库,它包含以下模型和方法
模型:
public class Employee {
public int EmpId { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
方法:
public class EmployeeService {
public List<Employee> GetEmployee() {
return new List<Employee>() {
new Employee() { EmpId = 1, Name = "John" },
new Employee() { EmpId = 2, Name = "Albert John" },
new Employee() { EmpId = 3, Name = "Emma" },
}.Where(m => m.Name.Contains("John")).ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个测试方法
[TestMethod()]
public void GetEmployeeTest() {
EmployeeService obj = new EmployeeService();
var result = obj.GetEmployee();
Xunit.Assert.Collection<Employee>(result, m => Xunit.Assert.Contains("John",m.Name));
}
Run Code Online (Sandbox Code Playgroud)
我收到了一条Exception消息
Assert.Collection() Failure
Collection: [Employee { EmpId = 1, Name = "John" }, Employee { EmpId = 2, Name = "Albert John" }]
Expected item count: 1
Actual item count: 2
Run Code Online (Sandbox Code Playgroud)
我的要求是检查所有items.Name应该包含子字符串"John".请帮助我检查如何使用Xunit.Assert.Collection
Ayb*_*btu 34
似乎Assert.Collection只使用每个元素检查器一次.因此,对于您的测试,以下工作:
[Fact]
public void GetEmployeeTest()
{
EmployeeService obj = new EmployeeService();
var result = obj.GetEmployee();
Assert.Collection(result, item => Assert.Contains("John", item.Name),
item => Assert.Contains("John", item.Name));
}
Run Code Online (Sandbox Code Playgroud)
但这意味着result必须有两个项目.
改变Assert为
Assert.All(result, item => Assert.Contains("John", item.Name));
Run Code Online (Sandbox Code Playgroud)
应该给你你期望的结果.
| 归档时间: |
|
| 查看次数: |
20593 次 |
| 最近记录: |