Visual Studio 2013显示我的代码覆盖率(此示例简化)对象缺少一个块:
据我所知,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
条件的正面结果,另一个验证否定结果。什么街区没有包括在内?我缺少什么逻辑条件?
答案 0 :(得分:3)
当您比较Nullable<T>
值时,C#编译器会创建其他检查以查看Nullable<T>
是否具有值。这些检查在代码中总是以相同的方式出现,因为您已经明确地完成了所有null
检查。
将条件更改为
if (ServiceWindowStart.Value > ServiceWindowEnd.Value)
应该解决这个问题。
答案 1 :(得分:2)
浅米色并不意味着代码没有被覆盖。这意味着它只被部分覆盖。您的ServiceWindowStart
和ServiceWindowEnd
可以为空。但是你只用值来测试它们。而且你没有考验平等。添加空值测试以及它们相等时的情况应该包括缺少的测试用例。
此结果的另一个可能原因可能与代码覆盖是针对IL代码而不是针对C#代码执行有关。并且可能无法完全覆盖IL等价物,或者可能无法保留代码的结构。
优化构建可以解决问题。转到解决方案资源管理器 - &gt;属性 - &gt;构建标签 - &gt;检查&#34;优化代码&#34;复选框。
选择此选项运行代码分析。
这篇有趣的博客文章涵盖了此主题:http://blogs.msdn.com/b/ddietric/archive/2009/10/21/all-the-wonderful-colors-of-code-coverage.aspx