【问题标题】:Visual Studio 2012 code coverage partially touched areaVisual Studio 2012 代码覆盖部分触及区域
【发布时间】: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


    【解决方案1】:

    这个问题看起来与MSTest Shows Partial Code Coverage on Compound Boolean Expressions 非常相似。

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

    如果你记得&& 只会在第一个表达式为真时计算第二个表达式。在您的情况下,我怀疑(因为您没有提到测试的方式或内容)您没有测试或场景,其中 allDeals 集合中有一个条目,其中 i.Numbernull

    【讨论】:

      猜你喜欢
      • 2018-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多