Methods 如何获取Nunit自定义属性的值

Methods 如何获取Nunit自定义属性的值,methods,attributes,nunit,Methods,Attributes,Nunit,我在用NUNIT。我想从Nunit测试DLL中检索某些类型的测试 我定义了一个自定义属性,然后将其分配给测试方法,如下所示: [Test, Tier(Tier.Second)] public void ThisIsMyTest() { ... } 这是我对Custiom Attibute的定义: public enum Tier { First = 1, Second, Third, Fourth } [AttributeUsage(

我在用NUNIT。我想从Nunit测试DLL中检索某些类型的测试

我定义了一个自定义属性,然后将其分配给测试方法,如下所示:

    [Test, Tier(Tier.Second)]
    public void ThisIsMyTest()
    { ... }
这是我对Custiom Attibute的定义:

 public enum Tier
{
    First = 1,
    Second,
    Third,
    Fourth
}

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class TierAttribute : PropertyAttribute
{
    public TierAttribute(Tier tier)
        : base(tier)
    { }
}
现在,我想选择使用具有特定层值的自定义属性的方法

首先,我加载我的程序集:

Type loadTests = ltAssm.GetType("Assm.Tests.LoadTests." + args[0]);
然后,我尝试仅检索带有该属性的测试:

 List<MethodInfo> tests = loadTests.GetMethods()
                                   .Where(m => m.GetCustomAttributes(typeof(TierAttribute), true).Count() > 0).ToList<MethodInfo>()
                                   .Where(t => (((t.GetCustomAttributes(typeof(TierAttribute), true).GetValue(0)))).ToString() == args[1]).ToList<MethodInfo>();
List tests=loadTests.GetMethods()
.Where(m=>m.GetCustomAttributes(typeof(TierAttribute),true).Count()>0.ToList()
其中(t=>((t.GetCustomAttributes(typeof(TierAttribute),true).GetValue(0))).ToString()==args[1]).ToList();
但它是空的

顺便说一下,我在上面的语句中没有使用第一个WHERE子句(并且只使用了第二个),但这会导致索引超出范围错误


任何想法,谢谢

如果去掉第二个WHERE子句会怎么样?顺便说一下,第一个WHERE子句不需要ToList()。事实上,如果您不需要从列表中添加/删除(即,您只需要进行迭代),您可能只需要将其保留为IEnumerable。