【发布时间】:2011-02-26 11:25:26
【问题描述】:
我最近将一个 C# 项目从 .NET 3.5 升级到 .NET 4。我有一个方法可以从给定的 MethodBase 实例列表中提取所有 MSTest 测试方法。它的身体是这样的:
return null == methods || methods.Count() == 0
? null
: from method in methods
let testAttribute = Attribute.GetCustomAttribute(method,
typeof(TestMethodAttribute))
where null != testAttribute
select method;
这在 .NET 3.5 中有效,但自从将我的项目升级到 .NET 4 后,此代码始终返回一个空列表,即使给定包含标有 [TestMethod] 的方法的方法列表也是如此。 .NET 4 中的自定义属性是否发生了变化?
调试,我发现GetCustomAttributesData()在测试方法上的结果给出了两个CustomAttributeData的列表,在Visual Studio 2010的'Locals'窗口中描述为:
Microsoft.VisualStudio.TestTools.UnitTesting.DeploymentItemAttribute("myDLL.dll")-
Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()-- 这就是我要找的东西
但是,当我在第二个 CustomAttributeData 实例上调用 GetType() 时,我得到了 {Name = "CustomAttributeData" FullName = "System.Reflection.CustomAttributeData"} System.Type {System.RuntimeType}。如何从CustomAttributeData 中获取TestMethodAttribute,以便从MethodBases 列表中提取测试方法?
【问题讨论】:
标签: c# unit-testing attributes c#-4.0 custom-attributes