我在使用Visual Studio 2012单元测试时遇到了问题,更具体地说是与代码覆盖率有关的问题。 以下是目标代码:
var someDeals = allDeals
.Where(i => i.Number != null && !i.Number.StartsWith(SomeString))
.Select(i => new DealInfoDto
{
CurrentDebtAmount = i.CurrentDebtAmount,
Date = i.Date,
NextMonthlyPaymentDate = i.NextMonthlyPaymentDate,
Number = i.Number,
AccountNumber = i.AccountNumber,
})
.ToArray();
当我运行代码覆盖分析时,它显示第二行 lambda 表达式(
i.Number != null && !i.Number.StartsWith(SomeString)
)是部分触及区域,我无法获得100%的覆盖率。但我确定此表达式已经被评估了(选择内部的表达式没有问题,因此 WHERE 内部的表达式为真,这意味着 && 语句的两个部分都被触及,我也检查了数据,确信 i.Number != null
和 !i.Number.StartsWith(SomeString)
)。
为什么这个块没有被覆盖到?
P.S. 我将 Where
分成了两个表达式,一切都变得正常了。但它看起来有些丑陋,最好只使用一个 Where
:
allDeals
.Where(i => i.Number != null)
.Where(i => !i.Number.StartsWith(CardAccountIdentifier))