自定义属性未在断点处触发
Custom Attribute not firing on break point
我为对象验证创建了一个自定义属性,并在 TaskValidatorAttribute
class 中的任意位置设置了一个断点,它似乎没有执行或触发任何操作。请参阅下面的代码:
自定义属性
[AttributeUsage(AttributeTargets.Class)]
public TaskValidatorAttribute: Attribute
{
public TaskValidatorAttribute(Type type)
{
if (type.IsSubclassOf(typeof(BaseClass)))
{
// some code for validation
}
}
}
基础Class
public abstract class BaseClass {}
继承Class
[TaskValidator(typeof(ModelTest))]
public class ModelTest : BaseClass {}
单元测试
public class ModelValidationTests
{
[Fact]
public void ValidateModel()
{
var model = new ModelTest();
model.ShouldNotBeNull();
}
}
我尝试在我的单元测试中 运行 它来触发我创建的自定义属性,但没有成功。我错过了什么吗?
当您创建 ModelTest
class 的实例时,这并不意味着创建了应用于 class 的属性实例。这些属性只有在您明确获取它们时才会被实例化。事实上,您甚至不需要 ModelTest
class 的实例!
所以这里的关键是属性不是对象的一部分,它是一个具有不同目的和生命周期的装饰器。
试试这个:
public class ModelValidationTests
{
[Fact]
public void ValidateModel()
{
object[] attributes = typeof(ModelTest).GetCustomAttributes(true);
attributes.ShouldNotBeNull();
}
}
我为对象验证创建了一个自定义属性,并在 TaskValidatorAttribute
class 中的任意位置设置了一个断点,它似乎没有执行或触发任何操作。请参阅下面的代码:
自定义属性
[AttributeUsage(AttributeTargets.Class)]
public TaskValidatorAttribute: Attribute
{
public TaskValidatorAttribute(Type type)
{
if (type.IsSubclassOf(typeof(BaseClass)))
{
// some code for validation
}
}
}
基础Class
public abstract class BaseClass {}
继承Class
[TaskValidator(typeof(ModelTest))]
public class ModelTest : BaseClass {}
单元测试
public class ModelValidationTests
{
[Fact]
public void ValidateModel()
{
var model = new ModelTest();
model.ShouldNotBeNull();
}
}
我尝试在我的单元测试中 运行 它来触发我创建的自定义属性,但没有成功。我错过了什么吗?
当您创建 ModelTest
class 的实例时,这并不意味着创建了应用于 class 的属性实例。这些属性只有在您明确获取它们时才会被实例化。事实上,您甚至不需要 ModelTest
class 的实例!
所以这里的关键是属性不是对象的一部分,它是一个具有不同目的和生命周期的装饰器。
试试这个:
public class ModelValidationTests
{
[Fact]
public void ValidateModel()
{
object[] attributes = typeof(ModelTest).GetCustomAttributes(true);
attributes.ShouldNotBeNull();
}
}