visual-studio-2012 - 在 Visual Studio 2012 中使用 F# 的内联函数的代码覆盖率

标签 visual-studio-2012 f# code-coverage inline

Visual Studio 2012 中的代码覆盖率工具标记所有 inline即使它们被覆盖,功能也不会被覆盖。

有什么方法可以使代码覆盖率适用于 inline职能?

最佳答案

当你写一个 inline函数,编译器将函数体内联到调用代码中。正如评论中所讨论的,它也不会发出此内联正文的调试信息(因此您无法进入该函数 - 我认为这可以解决 - 在 fsbugsmicrosoft 提交请求 | dot com ) .

但是,编译器也会生成代码的动态版本——如果你这样写:

let inline add a b = a + b

那么实际上有一个 add编译代码中的方法。该方法将是通用的( 'a -> 'b -> 'c )并使用动态查找来查找 + 的适当实现运算符(因为 .NET 泛型不能表示此类约束)。

使用反射或引用时将调用动态实现:
open Microsoft.FSharp.Linq.RuntimeHelpers
<@ add 1 2 @> |> LeafExpressionConverter.EvaluateQuotation |> printfn "Got: %A"

如果你把断点放在 add 里面并运行上面的代码,然后断点将被命中(我假设代码覆盖工具会报告该函数已覆盖)。

但请记住,这不是您编写 add 1 2 时实际执行的代码。在普通代码中 - 此处执行的代码是不同的实现(使用慢速动态查找,而不是内联)。

关于visual-studio-2012 - 在 Visual Studio 2012 中使用 F# 的内联函数的代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15166772/

相关文章:

code-coverage - 我应该在 AMD 和 Intel 芯片上运行回归测试程序吗?

android - Android 宋构建系统的 native 代码覆盖率

visual-studio - Visual Studio ctrl+箭头设置

c++ - VS 2012 中的显式模板声明/定义

c# - 从 MySQL 中获取元组的值到字符串数组

java - Seam 和 Mock 有什么区别?

c++ - Windows 应用商店应用程序 - 添加项目引用警告

c# - 从 C# 代码内部访问 F# 映射

正则表达式正在抓取前面的字符

algorithm - F# 错误和归并排序