我有下面的BL方法
public static void SomeMethod (List<SomeClass> group)
{
IEnumerable<SomeClass> groupWithFalse =(from SomeClass gr in group
where gr.SomeProp== false
select gr);
foreach (SomeClass grFalse in groupWithFalse)
{
grFalse.Save();
}
if (groupWithFalse.Any())
{
// do some stuff
}
}保存dl的模拟实现(不能更改,因为它在许多单元测试中使用)是:
public void Save()
{
group.SomeProp = true;
}如果我尝试单元测试流的最后一条语句,例如If (groupWithFalse.Any()),语句将失败,因为显然没有更多的元素将该属性设置为false。如果我将业务逻辑中的代码更改为:
public static void SomeMethod (List<SomeClass> group)
{
List<SomeClass> groupWithFalse = new List<SomeClass>();
foreach (var g in group)
{
if (g.SomeProp == false)
groupWithFalse.Add(g);
}
foreach (SomeClass grFalse in groupWithFalse)
{
grFalse.Save();
}
if (groupWithFalse.Any())
{
// do some stuff
}
}条件语句if (groupWithFalse.Any())在单元测试中不会失败。这一切为什么要发生?谢谢
发布于 2010-12-21 04:19:58
运行LINQ查询不会存储结果。
相反,它将在您每次枚举该查询时重新执行该查询。
调用Save()之后,查询将为空,因为没有一个条目满足where子句。
将其更改为
var unsaved = group.Where(g => !g.SomeProp).ToList();调用ToList()会将结果存储在List<T>中;这可以避免重新执行查询。
https://stackoverflow.com/questions/4493484
复制相似问题