我想将VS2010测试框架用于某些编码UI测试。我已经设置了以下基础测试类:
[CodedUITest]
public abstract class TestObjectBase
{
public TestContext TestContext { get; set; }
public TestObjectBase()
{
}
[TestInitialize]
public virtual void Initialize()
{
Database.ResetArchiveDatabase();
Database.ResetSettingsDatabase();
Database.ResetTransactionsDatabase();
}
[TestCleanup]
public virtual void Dispose()
{
}
}
所以我想问的是:[CodedUITest]
,[TestInitialize]
和[TestCleanup]
属性没有AttributeUsage=
和Inherited
成员。
继承自TestObjectBase
的子类的任何实例是否会将这些属性传播给自身(在[CodedUITest]
及其成员的情况下(在[TestInitialize]
和{的情况下) {1}})?
答案 0 :(得分:0)
the AttributeUsageAttribute.Inherited
property的默认值为true
,因此,如果您根本不使用AttributeUsageAttribute
,我会假设同样适用。我的测试似乎与此一致。
但正如payo正确指出的那样,AttributeUsageAttribute.Inherited
更像是一种推荐。这是因为有几种方法可以获取某种类型(或其成员)的属性:
在类型上调用GetCustomAttributes(inherit: false)
。这样,即使基类型指定了Inherited = true
,也不会继承基类型的属性。
致电GetCustomAttributes(inherit: true)
。这是实际上尊重AttributeUsageAttribute.Inherited
。
遍历继承层次结构并在每种类型上调用GetCustomAttributes(inherit: false)
。这样,即使他们指定了Inherited = false
,您也可以从基本类型中获取所有属性。
大多数工具可能会使用#2,因为它是最明智的选择,但肯定不是唯一的。