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

3

我在使用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))
1个回答

5
这个问题看起来非常类似于MSTest Shows Partial Code Coverage on Compound Boolean Expressions
我怀疑的是,当i.Numbernull时,您没有测试早期失败路径。
如果您记得&&只有在第一个表达式为真时才会评估第二个表达式。在您的情况下,我怀疑(因为您没有提及测试或场景的方式或内容),您没有一个测试或场景,在您的allDeals集合中存在一个i.Numbernull的条目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接