【问题标题】:Branch Coverage Issue分行覆盖问题
【发布时间】:2021-01-03 13:04:02
【问题描述】:

我很困惑为什么我在这段代码的测试中没有获得 100% 的测试分支覆盖率:

    public List<ReturnItem> FilterItems(List<Items> items)
    {
        if (items== null || !items.Any())
        {
            throw new ArgumentException("No items to filter");
        }

        var newItems = new List<NewItem>();

        foreach (var item in items)
        {
            if (item.Tracking.MidStateDate != null)
            {
                if (orderLine.Tracking.EndStateDate.GetValueOrDefault() < orderLine.Tracking.MidStateDate)
                {
                    var newItem = new NewItem(item);
                    newItem.MidStateDate = item.Tracking.MidStateDate.Value;
                    newItems.Add(newItem);
                }
            }
        }

        return newItems;
    }

我进行了以下测试:

  • NoItems();
  • HasItems_NullTracking();
  • HasItems_NoTracking();
  • HasItems_HasTracking_NoMidStateDate();
  • HasItems_HasTracking_HasMidStateDate_NullEndStateDate();
  • HasItems_HasTracking_HasMidStateDate_SmallerEndStateDate();
  • HasItems_HasTracking_HasMidStateDate_EndStateDateIsEqual();
  • HasItems_HasTracking_HasMidStateDate_LargerEndStateDate();
  • HasItems_HasTracking_HasMidStateDate_MixedState();

我无法让分支覆盖率测试达到 100%。这让我觉得我错过了一些东西。我已经删除了大部分代码,发现问题与这个条件if (orderLine.Tracking.EndStateDate.GetValueOrDefault() &lt; orderLine.Tracking.MidStateDate)有关。

谁能建议我可以添加的任何其他单元测试来处理分支覆盖率问题?

【问题讨论】:

  • 计算覆盖率的工具很可能是错误的。一般来说,尝试获得 100% 的覆盖率不应该是您的目标,大约 90% 是更合理的(或者基于代码库大小的更少)。
  • 看起来您没有测试第一条路径,其中itemsnull(应该抛出ArgumentNullException,而不是基ArgumentException,顺便说一下)。这与“没有项目”不同。
  • @madreflection 不幸的是,并非如此
  • @juharr 虽然我同意这有点 OTT,但这是我正在处理的代码库的要求。如果我因一个 dotnet core SDK 错误而浪费了一天时间,我会非常恼火,而不是以前没有发生过。
  • 谢谢你们的建议,伙计们。

标签: c# .net unit-testing code-coverage


【解决方案1】:

当我回复@juharr 时,我有一个脑电波。

问题在于代码不明确,有问题的条件中的可空日期时间。

if (orderLine.Tracking.EndStateDate.GetValueOrDefault() < orderLine.Tracking.MidStateDate)

^ 导致问题

if (orderLine.Tracking.EndStateDate.GetValueOrDefault() < orderLine.Tracking.MidStateDate.Value)

^ 有效!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多