4

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

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

正如我所看到的,这里的基本问题是互操作程序集实际上不包含任何可以检测的 IL(可能除了一些委托之外)。因此,尽管我可以将一个测试项目组合在一起来练习互操作层,但我无法了解我实际调用了多少这些方法和属性。

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

编辑:@Franci Penov,

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

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

您提到的模拟层会很有用,但最终不会实现测试互操作层本身的目标,而且我当然不想手动维护它——我们受 COM 人员的摆布接口的变化。

就像我上面提到的那样——下一步是为包装器生成包装器,并为测试目的检测这些包装器。

4

2 回答 2

1

要回答您的问题 - 无法为代码覆盖率检测互操作程序集。它们仅包含元数据,不包含您自己提到的可执行代码。

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

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

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

于 2008-09-29T13:19:13.217 回答
0

计划C:

使用Mono.Cecil 之类的东西将简单的执行计数器编织到互操作程序集中。例如,查看常见问题解答中的这一部分:“我想向无法调试的程序集添加一些跟踪功能,是否可以使用 Cecil?”

于 2008-09-30T10:06:31.237 回答