如何解决自定义属性未在断点上触发
我创建了一个用于对象验证的自定义属性,并在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();
}
}
我尝试在单元测试中运行它以触发我创建的自定义属性,但是没有运气。我错过了什么吗?
解决方法
创建ModelTest
类的实例时,并不意味着将创建应用于该类的属性的实例。仅当您显式获取属性时,才会实例化属性。实际上,您甚至不需要ModelTest
类的实例!
所以这里的关键是属性不是对象的一部分,它是具有不同用途和生命周期的装饰器。
尝试一下:
public class ModelValidationTests
{
[Fact]
public void ValidateModel()
{
object[] attributes = typeof(ModelTest).GetCustomAttributes(true);
attributes.ShouldNotBeNull();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。