Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试自定义FxCop规则_C#_Unit Testing_Fxcop - Fatal编程技术网

C# 单元测试自定义FxCop规则

C# 单元测试自定义FxCop规则,c#,unit-testing,fxcop,C#,Unit Testing,Fxcop,我想测试我的自定义fxrules 我看过这篇帖子: 但它不适用于fxcop的最新版本。 Microsoft.Cci.Method.GetMethod不存在,我找不到替代方法 您知道如何获取Microsoft.FxCop.Sdk.Method对象吗 提前感谢您的帮助。 最好的祝愿,从FxCop中移除反射桥是很久以前的事了。此外,使用未记录且不受支持的API并不是FxCopUnit中使用的方法的唯一问题,因为FxCopUnit没有实现误报筛查。您可能希望考虑切换到使用FXCOP输出报告的测试方法,以

我想测试我的自定义fxrules

我看过这篇帖子:

但它不适用于fxcop的最新版本。 Microsoft.Cci.Method.GetMethod不存在,我找不到替代方法

您知道如何获取Microsoft.FxCop.Sdk.Method对象吗

提前感谢您的帮助。
最好的祝愿,

从FxCop中移除反射桥是很久以前的事了。此外,使用未记录且不受支持的API并不是FxCopUnit中使用的方法的唯一问题,因为FxCopUnit没有实现误报筛查。您可能希望考虑切换到使用FXCOP输出报告的测试方法,以便筛选丢失的违规行为和意外的违规行为。

< P>也许您应该使用它作为开放源代码,因此它不易产生相同的问题。(为什么微软不能进行全面的测试驱动开发?

考虑到用于编写自定义规则的API与单元测试所需的API一样有良好的文档记录和支持,并且在1.36(对于CLR2)和10.0(对于CLR4)之间保持不变)--可能值得注意的是获取
Microsoft.FxCop.Sdk.Method
对象的过程概要,该对象只能使用FxCop程序集中声明的
public
类型和方法执行(无需反射欺骗)

从需要Microsoft.FxCop.Sdk.Method的对象的
类型开始,称之为
t
。通过静态入口点获取包含
t
的程序集的
AssemblyNode

assembly = AssemblyNode.GetAssembly(t.Module.Assembly.Location)
通过获取与
t
对应的FxCop
TypeNode

assembly.GetType(Identifier.For(t.Namespace), Identifier.For(t.Name))
然后在
TypeNode
Members
字段中搜索
member.Name.Name
是您要查找的方法的名称。假设这是一个单元测试,您应该能够安排正在检查的虚拟方法不重载


然后调用
MyRule.Check(member)
执行测试;这将返回
Problem
对象的集合,可以对其进行检查,以断言它包含预期结果,并且仅包含预期结果。

您可能希望签出my,它具有执行规则和验证标记了正确问题的规则所需的代码。由于Roslyn仍在CTP中,因此此时无法测试所有.NET语言功能

提取针对任何程序集运行规则所需的代码应该非常简单

本项目也欢迎任何规则贡献:)


啊,这真的很烦人,这将使单元测试变得更加困难。这将很好地工作。但是,请注意,必须手动调用所有重写的方法,例如
beforealysis()
AfterAnalysis()