代码之家  ›  专栏  ›  技术社区  ›  AndrewWhalan

VS2012中的代码覆盖率未将用于Dapper的动态类型化对象显示为已覆盖

  •  2
  • AndrewWhalan  · 技术社区  · 12 年前

    我们正在使用VS2012 Ultimate(感谢BizSpark!),并且我们已经开始进行集成测试,以确保我们的Dapper查询能够在循环中与DB一起工作。我正在努力确保所有与数据库相关的类的代码覆盖率达到100%。

    在我们的一个类中,代码覆盖率报告来自 AddDelay() 函数显示,声明和初始化数据匿名对象的行没有被覆盖,但它必须是Execute才能工作的。传入了一个mock对象,一切似乎都正常,但我不明白为什么该方法的代码覆盖率不是100%。

    鉴于它是一个超级简单的函数,以及 data 对象作为参数传递给execute函数?

        public bool AddDelay(DelayInformationModel delay)
        {
            const string sql = @"INSERT INTO EquipmentDelay(EquipmentID, DelayID, StartTime, EndTime, Actual, Comment) VALUES (@EquipmentID, @DelayID, @StartTime, @EndTime, @Actual, @Comment)";
    
            using (IDbConnection con = DataFactory.CreateOpenConnection())
            {
                var data = new 
                { 
                        EquipmentID = delay.EquipmentID, 
                        DelayID = delay.DelayCode, 
                        StartTime = delay.StartTime, 
                        EndTime = delay.EndTime, 
                        Actual = delay.Actual, 
                        Comment = (delay.Comment ?? "")
                };
    
                con.Execute(sql, data);
                return true;
            }
    
        }
    
    1 回复  |  直到 12 年前
        1
  •  2
  •   vishal mane    12 年前

    我认为有问题
    Comment=(delay.Comment??“”)

    delay.Comment不为null,因此此检查永远不会执行。 使用临时变量并获取其中的值

    像这样的东西

    var a= delay.Comment;
    var data = new 
                { 
                        EquipmentID = delay.EquipmentID, 
                        DelayID = delay.DelayCode, 
                        StartTime = delay.StartTime, 
                        EndTime = delay.EndTime, 
                        Actual = delay.Actual, 
                        Comment = a ?? ""
                };