分支机构覆盖问题



我很纠结为什么我在测试这段代码时没有获得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() < orderLine.Tracking.MidStateDate)有关。

有人能建议我添加任何其他单元测试来处理分支覆盖率问题吗?

就在我回复@juharr的时候,我灵机一动。

问题在于代码不是显式的,有问题的条件中的日期时间可以为null。

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

^导致问题

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

^工作!

相关内容

  • 没有找到相关文章

最新更新