Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 测试类是否具有属性?_C#_Unit Testing_Attributes - Fatal编程技术网

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,所以现在一切都清楚了