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