我有两个属性 - MigrationAttribute
和TestDataMigrationAttribute : MigrationAttribute
。我如何断言某个类已应用TestDataMigrationAttribute
但不是 MigrationAttribute
(这是父属性类)?
答案 0 :(得分:0)
如果您要查看TestDataMigrationAttribute
,请确保在使用Type.GetCustomAttributes()
时指定其显式类型:
typeof(MyClass).GetCustomAttributes(typeof(TestDataMigrationAttribute));
GetCustomAttributes
返回指定属性类型的属性或从中派生的属性。如果使用派生属性的类型(TestDataMigrationAttribute),则不会找到基本属性(MigrationAttribute)。如果使用base属性的类型,则可以找到这两个属性。
以上示例仅在类上标记[TestDataMigration]
时返回属性,而不是[Migration]
在类上。
如果您需要检查可以在类上定义两个属性的情况,但是您只需要只有[TestDataMigration]
的类,那么您必须检查基本属性类型并分析生成数组,或进行两次检查 - 每种属性类型一次。
答案 1 :(得分:0)
object[] attributes = typeof(MyTestClass).GetCustomAttributes(typeof(MigrationAttribute), true);
Assert.IsNotNull(attributes);
Assert.IsTrue(attributes.Any(x => x is TestDataMigrationAttribute));
Assert.IsFalse(attributes.Any(x => x is MigrationAttribute && !(x is TestDataMigrationAttribute)));
(假设您可以在类上定义两个属性)