分支覆盖问题
Branch Coverage Issue
我很困惑为什么我在测试这段代码时没有获得 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)
^ 有效!
我很困惑为什么我在测试这段代码时没有获得 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)
^ 有效!