我想测试我的自定义fxrules。
但它不适用于最后一个版本的fxcop。 Microsoft.Cci.Method.GetMethod不存在,我找不到替代方案。
您知道如何获取Microsoft.FxCop.Sdk.Method对象吗?
提前感谢您的帮助。 最好的问候,
答案 0 :(得分:6)
鉴于用于编写自定义规则的API与单元测试所需的API一样,并且在1.36(对于CLR2)和10.0(对于CLR4)之间保持相同 - 它可能是值得注意的是获取Microsoft.FxCop.Sdk.Method
对象的过程大纲,可以仅使用FxCop程序集中声明为public
的类型和方法执行(不需要反射技巧)。
从您想要Type
的对象的Microsoft.FxCop.Sdk.Method
开始,调用此t
。通过静态入口点获取包含AssemblyNode
的程序集的t
assembly = AssemblyNode.GetAssembly(t.Module.Assembly.Location)
通过
获取与TypeNode
对应的FxCop t
assembly.GetType(Identifier.For(t.Namespace), Identifier.For(t.Name))
然后搜索TypeNode
的{{1}}字段,找到Members
是您要查找的方法名称的字段。鉴于这是一个单元测试,您应该能够安排正在检查的虚拟方法不会过载。
然后致电member.Name.Name
进行测试;这将返回MyRule.Check(member)
个对象的集合,可以检查它们以断言它包含预期结果和仅包含预期结果。
答案 1 :(得分:1)
很久以前,从FxCop移除反射桥是announced。此外,使用未记录和不受支持的API并不是FxCopUnit中使用的方法的唯一问题,因为FxCopUnit不实现对误报的筛选。您可能希望考虑切换到使用FxCop输出报告的测试方法,以便筛选丢失的违规和意外违规。
答案 2 :(得分:1)
也许你应该使用Gendarme因为它是开源的,所以它很容易出现同样的问题。 (为什么微软无法在测试驱动开发方面取得进展?)
答案 3 :(得分:0)
您可能想要查看我的RoslynCTP based FxCop test framework,它具有执行规则所需的代码并验证它是否标记了正确的问题。由于Roslyn仍处于CTP状态,因此目前还无法测试所有.NET语言功能。
提取针对任何程序集运行规则所需的代码应该非常简单。
欢迎任何规则贡献到这个项目:)。