繁体   English   中英

什么街区没有覆盖?

[英]What Block Isn't Covered?

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条件的正面结果,另一个验证否定结果。 什么街区不包括在内? 我缺少什么逻辑条件?

当您比较Nullable<T>值时,C#编译器会创建其他检查以查看Nullable<T>具有值。 这些检查在代码中总是以相同的方式出现,因为您已经明确地完成了所有null检查。

将条件更改为

if (ServiceWindowStart.Value > ServiceWindowEnd.Value)

应该解决这个问题。

浅米色并不意味着代码没有被覆盖。 这意味着它只被部分覆盖。 您的ServiceWindowStartServiceWindowEnd可以为空。 但是你只用值来测试它们。 而且你没有测试平等。 添加空值测试以及它们相等时的情况应该包括缺少的测试用例。

此结果的另一个可能原因可能与代码覆盖是针对IL代码而不是针对C#代码执行的事实有关。 并且可能无法完全覆盖IL等效或者可能无法保留代码的结构。

优化构建可以解决问题。 转到解决方案资源管理器 - >属性 - >构建选项卡 - >选中“优化代码”复选框。

选中此选项运行代码分析。

这是有趣的博客文章,涵盖了这个主题: http//blogs.msdn.com/b/ddietric/archive/2009/10/21/all-the-wonderful-colors-of-code-coverage.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM