我创建了一个用于对象验证的自定义属性,并在TaskValidatorAttribute
类中的任何地方设置了断点,似乎它没有执行任何操作或触发了任何操作。请参阅下面的代码:
自定义属性
[AttributeUsage(AttributeTargets.Class)]
public TaskValidatorAttribute: Attribute
{
public TaskValidatorAttribute(Type type)
{
if (type.IsSubclassOf(typeof(BaseClass)))
{
// some code for validation
}
}
}
基本类
public abstract class BaseClass {}
继承的类
[TaskValidator(typeof(ModelTest))]
public class ModelTest : BaseClass {}
单元测试
public class ModelValidationTests
{
[Fact]
public void ValidateModel()
{
var model = new ModelTest();
model.ShouldNotBeNull();
}
}
我尝试在单元测试中运行它以触发我创建的自定义属性,但是没有运气。我错过了什么吗?
答案 0 :(得分:3)
创建ModelTest
类的实例时,并不意味着将创建应用于该类的属性的实例。仅当您显式获取属性时,才会实例化属性。实际上,您甚至不需要ModelTest
类的实例!
所以这里的关键是属性不是对象的一部分,它是具有不同用途和生命周期的装饰器。
尝试一下:
public class ModelValidationTests
{
[Fact]
public void ValidateModel()
{
object[] attributes = typeof(ModelTest).GetCustomAttributes(true);
attributes.ShouldNotBeNull();
}
}