C#类继承中虚拟基类方法/成员的属性

时间:2012-03-22 19:45:16

标签: c# unit-testing c#-4.0 coded-ui-tests vs-unit-testing-framework

我想将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}})?

1 个答案:

答案 0 :(得分:0)

the AttributeUsageAttribute.Inherited property的默认值为true,因此,如果您根本不使用AttributeUsageAttribute,我会假设同样适用。我的测试似乎与此一致。

但正如payo正确指出的那样,AttributeUsageAttribute.Inherited更像是一种推荐。这是因为有几种方法可以获取某种类型(或其成员)的属性:

  1. 在类型上调用GetCustomAttributes(inherit: false)。这样,即使基类型指定了Inherited = true,也不会继承基类型的属性。

  2. 致电GetCustomAttributes(inherit: true)。这是实际上尊重AttributeUsageAttribute.Inherited

  3. 价值的唯一方式
  4. 遍历继承层次结构并在每种类型上调用GetCustomAttributes(inherit: false)。这样,即使他们指定了Inherited = false,您也可以从基本类型中获取所有属性。

  5. 大多数工具可能会使用#2,因为它是最明智的选择,但肯定不是唯一的。