.NET代码覆盖工具不';无法在加载.net程序集的本机应用程序上工作

.NET代码覆盖工具不';无法在加载.net程序集的本机应用程序上工作,.net,code-coverage,revit,.net,Code Coverage,Revit,我正在为Revit Architecture编写一个插件模块,它提供了一个.NET API。从本质上讲,您可以使用实现特定接口的类创建程序集。Revit然后加载部件并调用接口 我希望能够获取插件代码的持续代码覆盖率指标,但发现所有典型的代码覆盖率工具(NCover、PartCover、dotCover)在这种情况下都不起作用,因为宿主Revit应用程序(Revit.exe)是Windows本机应用程序,而不是托管应用程序。NCover文档特别指出,如果所涵盖的进程是本机应用程序进程,则NCove

我正在为Revit Architecture编写一个插件模块,它提供了一个.NET API。从本质上讲,您可以使用实现特定接口的类创建程序集。Revit然后加载部件并调用接口

我希望能够获取插件代码的持续代码覆盖率指标,但发现所有典型的代码覆盖率工具(NCover、PartCover、dotCover)在这种情况下都不起作用,因为宿主Revit应用程序(Revit.exe)是Windows本机应用程序,而不是托管应用程序。NCover文档特别指出,如果所涵盖的进程是本机应用程序进程,则NCover将不起作用。我假设其他工具使用的仪器技术是相似的,因此具有相同的不工作的根本原因

我想知道,对于上述任何一种工具,在这种情况下是否有解决方法,或者是否有其他代码覆盖率工具或技术可以使用。TIA.

我们的团队应该为此而努力


它通过检测源代码来工作;运行插入指令的源代码(通过任何方法,包括传统的编译和运行技术)。因此,它不关心代码如何执行,只关心它以某种方式执行。插装数据在添加的类中收集,您可以完全控制数据导出的方式和时间,因此可以从任意环境中导出。

NCover、PartCover和dotCover是.NET覆盖率工具,通过插装IL来实现(我知道PartCover和NCover是通过使用ICorProfilerCallback接口和JITComilationStarted事件等来收集覆盖率信息的,因此它们不知道如何处理本机代码(即使它们实际上是用本机代码编写的)

我不能自称知道dotCover是如何工作的


如果您希望获得本机应用程序的覆盖率,我会考虑使用NUnit(etc)练习插件模块时使用的工具,例如

,它不是只加载程序集而不经过Revit Architecture吗?我知道我们在测试插件时(请注意,不是针对Revit)R#中运行的NUnit只托管DLL并运行它们,不涉及宿主应用程序。我们可以在宿主应用程序不存在的情况下获取覆盖率指标。Michael,我有单元测试,它们以您描述的方式工作,但是,我对功能/集成测试的覆盖率指标感兴趣,这需要Revit宿主。谢谢。我“我很想更多地了解您使用Revit的测试实践,我相信运行Building Coder博客的Jeremy Tammik也很想发布一篇关于它的文章(他在今年早些时候对我表示了兴趣)。您是否有兴趣发布一些关于您如何做事情的内容?