跳过自定义fxcop规则中的测试方法

时间:2014-06-04 10:38:51

标签: c# code-analysis fxcop

我正在编写一个自定义fxcop规则来检查未使用的本地人。 (是的,有一个existing,但我想排除TestMethods被检查。)

Introspector向我显示TestMethodAttribute在编译时可用:enter image description here

我似乎无法真正检查属性是否存在。

我尝试了以下方法:

方法1。

_TestAttribType = FrameworkAssemblies.Mscorlib.GetType(Identifier.For("Microsoft.VisualStudio.TestTools.UnitTesting"), Identifier.For("TestMethodAttribute"));
AttributeNode testAttribute = method.GetAttribute(_TestAttribType);
if (testAttribute != null)
    return null;

方法2。

if(method.Attributes.Any(attrib => attrib.ToString().Contains("Test")))
    return null;

方法3。

if(method.Attributes.Any(attrib => attrib.Type == typeof(TestMethodAttribute))
    return null;

方法1不起作用,因为Microsoft.VisualStudio.TestTools.Unittesting不在mscorlib中。第二种方法也不起作用,我不知道为什么。第三种方法无法编译,因为FxCop-API不支持TestMethodAttribute。

如何排除在我的FxCop规则中检查testmethods?

1 个答案:

答案 0 :(得分:3)

仅基于名称的简单方法是:

method.Attributes.Any(a => a.Type.Name.Name == "TestMethodAttribute")

如果您想要一个具有一些性能增强功能的更完整的解决方案,请查看反编译器中IsVSUnitTestMethod规则中MarkMembersAsStatic方法的实现。