interop - 是否可以对互操作程序集进行代码覆盖率分析?

标签 interop com-interop instrumentation

我也在 MSDN 论坛上问过这个问题,但没有找到解决方案:

http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3686852&SiteID=1

据我所知,这里的基本问题是互操作程序集实际上不包含任何可以检测的 IL(可能除了一些委托(delegate)之外)。因此,尽管我可以构建一个测试互操作层的测试项目,但我无法了解我实际调用了多少这些方法和属性。

B 计划是编写一个代码生成器,该生成器创建一个 RCWW(运行时可调用包装器)库,并对其进行检测以实现代码覆盖率。

编辑:@Franci Penov,

是的,这正是我想做的。交付给我们的 COM 组件构成了一个包含大约 12 个 DLL 的库。 3000种。我们在应用程序中使用该库,并负责测试该互操作层,因为向我们提供库的团队只进行了最少的测试。代码覆盖率将使我们能够确保所有接口(interface)和组件类都得到执行。这就是我想做的一切。我们有单独的测试项目来运行我们自己的托管代码。

是的,理想情况下,COM 服务器团队应该测试和分析他们自己的代码,但我们并不生活在理想的世界中,我必须根据他们的工作交付高质量的产品。如果可以生成一份测试报告,表明我已经测试了他们 80% 的代码接口(interface),而其中 50% 的代码接口(interface)并不像宣传的那样工作,那么我就可以在需要修复的地方进行修复,而不是解决问题。

您提到的模拟层很有用,但最终不会实现测试互操作层本身的目标,而且我当然不想手动维护它——我们受到 COM 的支配伙计们,关于界面的变化。

就像我上面提到的 - 下一步是为包装器生成包装器并检测这些包装器以用于测试目的。

最佳答案

回答你的问题 - 不可能检测互操作程序集的代码覆盖率。正如您自己提到的,它们仅包含元数据,并且不包含可执行代码。

此外,我认为尝试对互操作程序集进行代码覆盖没有多大意义。您应该测量您编写的代码的代码覆盖率。

从您提到的 MDN 论坛主题来看,在我看来,您实际上想测量您的代码如何使用 COM 组件。除非代码的目标是枚举并显式调用 COM 对象的所有方法和属性,否则不需要测量代码覆盖率。您需要单元/场景测试来确保您的代码在正确的时间调用正确的方法/属性。

恕我直言,正确的方法是为 COM 对象编写一个模拟层,并测试您是否按预期调用所有方法/属性。

关于interop - 是否可以对互操作程序集进行代码覆盖率分析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/99520/

相关文章:

c# - 在 Microsoft Office 互操作 FileSaveAs 方法中禁用覆盖现有文件提示

python - 从标准 Python 调用 IronPython

c# - 在 C++/CLI 中实例化 COM 对象

java - 仪器重新转换似乎不起作用

java - 是否可以在 JUnit 测试中使用 java.lang.instrument.Instrumentation?

c# - 如何将消息从托管应用程序的一个实例发送到另一个实例?

非矩阵数据类型的 C# 和 MATLAB 互操作性

c# - 在 C++ IDL 中定义结构,然后在 C# 中适本地定义 MarshalAs()

c# - 在不注册 DLL 的情况下通过 ComInterop 在 C# 中编码(marshal)非托管 dll

c - 强制内存分配始终到相同的虚拟地址