C# 测试类是否具有属性?
我正在尝试进行一个小的测试优先开发,并尝试验证我的类是否标记了一个属性:C# 测试类是否具有属性?,c#,unit-testing,attributes,C#,Unit Testing,Attributes,我正在尝试进行一个小的测试优先开发,并尝试验证我的类是否标记了一个属性: [SubControllerActionToViewDataAttribute] public class ScheduleController : Controller 如何对类进行单元测试,以确保该类具有指定给它的属性?与您通常在类上检查属性的方法相同 下面是一些示例代码 typeof(ScheduleController) .IsDefined(typeof(SubControllerActionToViewDat
[SubControllerActionToViewDataAttribute]
public class ScheduleController : Controller
如何对类进行单元测试,以确保该类具有指定给它的属性?与您通常在类上检查属性的方法相同 下面是一些示例代码
typeof(ScheduleController)
.IsDefined(typeof(SubControllerActionToViewDataAttribute), false);
我认为在很多情况下,在单元测试中测试属性的存在是错误的。因为我没有使用MVC contrib的子控制器功能,所以我无法评论它在这种情况下是否合适。检查一下
Attribute.GetCustomAttribute(typeof(ScheduleController),
typeof(SubControllerActionToViewDataAttribute))
不是null(Assert.IsNotNull
或类似)
(我之所以使用这个而不是
是因为定义了,是因为大多数时候我也想验证属性的某些属性……)我知道这个线程确实很旧,但如果有人偶然发现它,您可能会发现project非常方便执行这种断言
typeof(MyPresentationModel).Should().BeDecoratedWith<SomeAttribute>();
typeof(MyPresentationModel).Should().BeDecoratedWith();
在以下情况下也可以使用泛型:
var type = typeof(SomeType);
var attribute = type.GetCustomAttribute<SomeAttribute>();
var type=typeof(SomeType);
var attribute=type.GetCustomAttribute();
这样,您就不需要另一个(…)
类型,这可以使代码更干净。要仅检查属性是否存在,这通常是无参数/无属性属性属性所需的全部,使用它更便宜。IsDefined,因为它将查询元数据,而不是反序列化和实例化属性对象。。。但在大多数情况下(尤其是单元测试),您不太可能注意到差异。也许如果它是生产代码中的一个紧密循环…@Marc-我同意性能上的差异在单元测试中可能不明显。如果需要使用该属性,我会得到它,正如您所说,在大多数情况下都是这样。我最近在一个框架中使用了IsDefined,我正在编写该框架,以排除可排序字段下拉列表中的一列-这很好,因为我不需要使用属性本身。我们如何对方法进行相同的测试?Did+1,然后注意到错误。它应该是.IsDefined(typeof(Type),false)@你当然是对的。我现在已经更新了我的答案。我当然不能在当时对照编译器检查我的答案!感谢您指出错误。这种方法比以前更快。这对我不起作用。它使用
。。我失踪了吗?@Scanzy我不确定,你没有使用IDE吗?(通常他们建议使用正确的)您会遇到什么错误?好的,我发现GetCustomAttribute
方法在.NET 4.5中可用,并且我的IDE设置为3.5,所以现在一切都清楚了