是否可以在单元测试中使用.NET Introspection功能? 在我们的软件中,我禁止使用某些操作(比较枚举值,因为这是一种特殊的方法)。我记得FxCop(静态代码分析)ofers通过Introspection访问代码模型。有了它,您可以检查是否使用了某个功能。我想写一个单元测试来做同样的检查,但我不确定是否为单元测试提供了内省或类似的东西。 或者你可能有另一个想法,我该怎么做。在单元测试中使用.NET Introspection/FxCop规则功能
预先感谢您!
是否可以在单元测试中使用.NET Introspection功能? 在我们的软件中,我禁止使用某些操作(比较枚举值,因为这是一种特殊的方法)。我记得FxCop(静态代码分析)ofers通过Introspection访问代码模型。有了它,您可以检查是否使用了某个功能。我想写一个单元测试来做同样的检查,但我不确定是否为单元测试提供了内省或类似的东西。 或者你可能有另一个想法,我该怎么做。在单元测试中使用.NET Introspection/FxCop规则功能
预先感谢您!
我不确定关于FxCop,但是您可以使用.NET Reflection(是您内省的意思吗?)来强制执行某些代码行为。
例如,我在某些测试中使用了Reflection,以确保某些“内部”类型不会通过我们的公共服务API暴露。我们只是绕过我们的公共API,并确认没有暴露的类型(方法参数,属性等等)在“内部”类型列表中。在包装第三方组件时,这非常方便,但我们希望确保其库中的所有类型都不会通过我们的API公开。
如果你不熟悉.NET反射,它为您提供了一个API,它可以让你查询类型像类的方法,方法参数,类属性等信息......你可以在这里概述开始:
http://msdn.microsoft.com/en-us/library/f7ykdhsy(v=vs.71).aspx
我有枚举UserRole {...},我想确保角色比较不是通过is-equal操作,而是通过特殊方法。反射并不能让我检查整个源代码。所以我问一些关于自省的问题;-) – llasarov
看来,FxCop的内部不能使用externally(除本身的FxCop或Visual Studio)。
如果要验证您的体系结构,可以尝试PostSharp功能Architecture validation或FxCop单选备选Gendarme。
工具NDepend可以帮助你做到这一点,这要归功于NDepend.API。 免责声明:我的工具
NDepend.API的开发者之一,提出包含内省一个.NET代码库所需的所有类型成员的命名空间NDepend.CodeModel。
使用NDepend.API,您可以编写单元测试来检查广泛的问题,例如unused methods。 NDepend.CodeModel已被设计为LINQ语法友好的,并且200 of LINQ default code rules是默认提议的(用我们所谓的CQLinq编写)。
是否有某些特定原因需要通过单元测试来完成,而不是简单地创建自定义FxCop规则? –