-1

我想使用 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=andInherited成员。

继承自的子类的任何实例TestObjectBase是否会将这些属性传播到自身(在 the[CodedUITest]及其成员的情况下(在 and 的情况下[TestInitialize][TestCleanup]

4

1 回答 1

0

AttributeUsageAttribute.Inherited属性的默认值为true,因此如果您根本不使用,我会假设同样适用AttributeUsageAttribute。我的测试似乎同意这一点。

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

  1. 调用GetCustomAttributes(inherit: false)类型。这样,基类型中的任何属性都不会被继承,即使它们指定了Inherited = true.

  2. 打电话GetCustomAttributes(inherit: true)。这是唯一真正尊重AttributeUsageAttribute.Inherited.

  3. 遍历继承层次结构并调用GetCustomAttributes(inherit: false)每种类型。这样,您可以从基本类型中获取所有属性,即使它们指定了Inherited = false.

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

于 2012-03-22T21:05:37.033 回答