-1

我想为某些编码UI测试使用VS2010测试框架。我已经安装了以下基本测试类:C#中虚拟基类方法/成员的属性继承

[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][TestCleanup])的情况下?

+1

什么阻止你只是尝试它? – 2012-03-22 20:02:42

+0

有趣。这是我的同事在我发布帖子后说的。那么,我可以。我也可能会留下这个问题,因为在我看来这是一个很好的问题。 – bleepzter 2012-03-22 20:11:32

+0

@bleepzter,如果你找到答案,你应该自己回答这个问题,而不仅仅是“让它留下”。 – svick 2012-03-22 20:51:54

回答

0

的默认值the AttributeUsageAttribute.Inherited propertytrue,所以我会假设,如果你不使用AttributeUsageAttribute都同样适用。而我的测试似乎与以同意。

但作为payo正确地指出,AttributeUsageAttribute.Inherited更多的是推荐的。这是因为有有几种获取属性的方法(或其成员):

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

  2. 请致电GetCustomAttributes(inherit: true)。这是实际上尊重AttributeUsageAttribute.Inherited价值的唯一方法。

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

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