Visual Studio 2013 将我对此(针对此示例进行了简化)对象的代码覆盖率显示为缺少一个 block :
据我所知,if
应该恰好有两种状态。通过和失败。调试我的测试表明每个条件都执行一次。特别是这两个测试:
[TestMethod]
public void CanNotHaveNegativeServiceWindow()
{
// arrange
var request = new CreateCaseRequest
{
ServiceWindowStart = new DateTime(2014, 12, 31, 12, 00, 00),
ServiceWindowEnd = new DateTime(2014, 12, 31, 11, 00, 00)
};
// act
var result = request.GetValidationErrors();
// assert
Assert.AreEqual(1, result.Count());
}
[TestMethod]
public void CanHaveServiceWindow()
{
// arrange
var request = new CreateCaseRequest
{
ServiceWindowStart = new DateTime(2014, 12, 31, 11, 00, 00),
ServiceWindowEnd = new DateTime(2014, 12, 31, 12, 00, 00)
};
// act
var result = request.GetValidationErrors();
// assert
Assert.AreEqual(0, result.Count());
}
一个测试验证特定 if
条件的肯定结果,另一个验证否定结果。什么 block 没有被覆盖?我缺少什么逻辑条件?
最佳答案
当你比较Nullable<T>
时值,C# 编译器会创建额外的检查以查看 Nullable<T>
有值(value)观。这些检查将始终以相同的方式出现在您的代码中,因为您已经完成了所有 null
明确检查。
将条件更改为
if (ServiceWindowStart.Value > ServiceWindowEnd.Value)
应该可以解决这个问题。
关于c# - 什么 block 没有被覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27800069/