C#属性编程(二)

本文介绍了NUnit的实现机制,它通过反射获取测试类中方法和类的属性并进行处理。文中展示了如何通过反射获得对象和方法的属性定义,如[TestFixture]和[Test]属性,还说明了NUnit如何分析方法属性确定测试方法,以及Ignore属性类的定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实知道了如果编写自己的属性,那么对Nunit的实现机制就可以很明白了,Nunit就是通过反射获取测试类中方法和类的属性,然后进行相应处理的
假设有对象obj
Type type=obj.getType() 先获取该对象的Type 类型
TestFixtureAttribute [] AttributeArray = (TestFixtureAttribute []) type.GetCustomAttributes(typeof(TestFixtureAttribute ), false);
通过反射获得针对该对象的属性定义, 比如Nunit中针对测试类的[TestFixture]属性
MethodInfo minfo=type.getMethod(“方法名“);
获得该对象指定方法名的方法信息
TestAttribute [] AttributeArray = (TestAttribute []) minfo.GetCustomAttributes(typeof(TestAttribute ), false);
获得针对该方法的属性定义,比如Nunit测试类中针对方法的[Test]属性
Nunit实在在操作中,肯定是通过type.getMethods()方法获得所有方法信息,然后挨个分析方法的属性来确定那些方法需要测试的,比如当它碰到Ignore属性的时候就会跳过测试
由此可以猜测Ignore属性类基本是象如下定义的:
 [AttributeUsage(AttributeTargets.Method)]
 public class IgnoreAttribute : Attribute
 {
    private string describe;//描述信息
    public IgnoreAttrebute(string info)
    {describe=info;}

    public string Describe;
    {get{..};set{..};}
}
通过设置AttributeTargets为Method表明该属性只能为方法所用,通过一个构造方法,就强制了在使用Ignore属性的时候必须输入一些描述信息,比如[Ignore(“测试通过“)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值