c# - 什么 block 没有被覆盖?

标签 c# unit-testing visual-studio-2013 code-coverage

Visual Studio 2013 将我对此(针对此示例进行了简化)对象的代码覆盖率显示为缺少一个 block :

code coverage

据我所知,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/

相关文章:

c# - 将int转换为特定格式的字符串

java - OkHttp MockWebServer 无法接受 android P(API 28)仪器测试中的连接

asp.net-mvc - VS2013 与 VS2015 项目类型(ASP.NET 项目)不兼容

angularjs - 是否有 Angular 2 的官方 nuget 包?

C# - 单击另一个按钮时创建一个按钮

c# - 如何从列表类型中获取模板类型?

c# - 努力单元测试 : Argument 'xmlReader' is not valid

javascript - 配置一个从单元测试中的延迟返回 promise 的 stub 工厂?

c++ - 在没有系统 ("pause"的情况下立即阻止 Visual Studio C++ 控制台退出)或额外获取

c# - Azure WebJob 的 BlobInput 和 BlobOutput 类在哪里?