2011-09-21 59 views
1

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

预先感谢您!

+0

是否有某些特定原因需要通过单元测试来完成,而不是简单地创建自定义FxCop规则? –

回答

0

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

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

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

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

+0

我有枚举UserRole {...},我想确保角色比较不是通过is-equal操作,而是通过特殊方法。反射并不能让我检查整个源代码。所以我问一些关于自省的问题;-) – llasarov

2

看来,FxCop的内部不能使用externally(除本身的FxCop或Visual Studio)。

如果要验证您的体系结构,可以尝试PostSharp功能Architecture validation或FxCop单选备选Gendarme

0

工具NDepend可以帮助你做到这一点,这要归功于NDepend.API免责声明:我的工具

NDepend.API的开发者之一,提出包含内省一个.NET代码库所需的所有类型成员的命名空间NDepend.CodeModel

使用NDepend.API,您可以编写单元测试来检查广泛的问题,例如unused methodsNDepend.CodeModel已被设计为LINQ语法友好的,并且200 of LINQ default code rules是默认提议的(用我们所谓的CQLinq编写)。