确保/检查是否在 linq 中选择了属性.带有单元测试的 select() 语句



假设我有以下类:

public class Person
{
public string FirstName{get;set;}
public string LastName{get;set;}
public int Age{get;set;}
}

假设我有这个查询:

var persons = someListOfPersons.Where(r => r.Age > 18)
                               .Select(m => new Person(){LastName = m.LastName});

正如我们在上面看到的,我正在选择新的Person对象,实际上只选择了 LastName 属性。请注意,在这一点上,这仍然只是一个IQueryable

如何对此进行单元测试,以确保 LastName 属性已包含在 select 语句中?

我将专注于测试您尝试通过其公共合约测试的代码段的实际行为。测试实现细节,如返回对象的类型、是否调用 getter 等,将测试与实现非常接近,这意味着代码中的任何更改都需要更改测试。这是您希望最小化的内容,否则维护单元测试的成本将会增加。您可以在此处找到有关测试行为而不是实现细节的好文章。

正如 Leslie Davies 所提到的,我还会在我的测试中提供一个虚拟人员列表,并检查这段代码是否正确地只返回 18 岁以上人员的姓氏。

旁注:如果只通过这段代码公开姓氏很重要,为什么不重新设计代码,使其只返回名称而不是不完整的 Person 对象?返回仅部分初始化的 Person 对象可能会导致进一步的混淆。

最新更新