在单元测试中使用.NET Introspection / FxCop Rules功能

时间:2011-09-21 14:17:32

标签: .net unit-testing fxcop introspection

是否可以在单元测试中使用.NET Introspection功能? 在我们的软件中,我想禁止使用某些操作(比较枚举值,因为那里有一种特殊的方法)。我记得FxCop(静态代码分析)通过Introspection访问代码模型。有了它,您可以检查是否使用了某些功能。我想写一个单元测试进行相同的检查,但我不确定是否为单元测试提供了内省或类似的东西。 或许你还有另外一个想法,我怎么做。

提前谢谢!

3 个答案:

答案 0 :(得分:2)

似乎不能使用FxCop内部externally (FxCop本身或Visual Studio中除外)。

如果您想验证您的体系结构,可以尝试PostSharp功能Architecture validation或FxCop Mono替代Gendarme

答案 1 :(得分:0)

我不确定FxCop,但你可以使用.NET Reflection(这就是内省的意思吗?)来强制执行某些代码行为。

例如,我在某些测试中使用了Reflection来确保某些“内部”类型不会通过我们的公共服务API公开。我们只是循环使用我们的公共API并验证没有公开的类型(方法参数,属性等)在“内部”类型列表中。在我们包装第三方组件时,这非常方便,但我们希望确保其库中没有任何类型通过我们的API公开。

如果您不熟悉.NET反射,它会为您提供一个API,使您可以查询类型方法,方法参数,类属性等信息...您可以从这里开始概述:

http://msdn.microsoft.com/en-us/library/f7ykdhsy(v=vs.71).aspx

答案 2 :(得分:0)

借助NDepend.API,NDepend工具可以帮助您实现这一目标。 免责声明:我是该工具的开发人员之一

NDepend.API提出名称空间NDepend.CodeModel,其中包含内省.NET代码库所需的所有类型和成员。

使用NDepend.API,您可以编写单元测试来检查各种问题,例如unused methods NDepend.CodeModel 设计为LINQ语法友好,默认情况下提出200 of LINQ default code rules(用我们称之为CQLinq的方式编写)。