Visual Studio 2012代码覆盖率部分触及区域

时间:2012-10-30 10:22:43

标签: unit-testing visual-studio-2012 code-coverage

我对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)

为什么不包含此块?

P.S。我将Where分成两个表达式,一切都变好了。但它看起来很丑陋,只会更好Where

allDeals
    .Where(i => i.Number != null)
    .Where(i => !i.Number.StartsWith(CardAccountIdentifier))

1 个答案:

答案 0 :(得分:5)

此问题与MSTest Shows Partial Code Coverage on Compound Boolean Expressions非常相似。

我怀疑发生的事情是,当i.Numbernull时,您没有测试早期失败路径。

如果你还记得&&只会评估第二个表达式,如果第一个表达式为真。在您的情况下,我怀疑(因为您没有提到测试的方式或内容)您没有测试或方案,其中allDeals集合中有i.Number null的条目1}}。