【发布时间】:2012-10-30 10:22:42
【问题描述】:
我对 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();
当我运行分析代码覆盖率时,它显示第二行 (i.Number != null && !i.Number.StartsWith(SomeString)) 中的 lambda 表达式是部分接触区域,我无法获得 100% 的覆盖率。但我确信这个表达式已经被评估(SELECT 里面的表达式是好的,所以 WHERE 里面的表达式是真的,这意味着 && 语句的两个部分都被触及了,我也检查了数据,我确定i.Number != null和!i.Number.StartsWith(SomeString)。
为什么这个块没有被覆盖?
附:我将Where 拆分为两个表达式,一切都变好了。但它看起来很丑,最好只有一个Where:
allDeals
.Where(i => i.Number != null)
.Where(i => !i.Number.StartsWith(CardAccountIdentifier))
【问题讨论】:
标签: unit-testing visual-studio-2012 code-coverage