C#类继承中虚拟基类方法/成员的属性
我想将VS2010测试框架用于一些编码的UI测试。我已经设置了以下基本测试类:C#类继承中虚拟基类方法/成员的属性,c#,unit-testing,c#-4.0,coded-ui-tests,vs-unit-testing-framework,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() {
[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=
和成员
继承自TestObjectBase
的任何子类实例是否会将这些属性传播到自身(对于[CodedUITest]
及其成员(对于[TestInitialize]
和[TestCleanup]
)?的默认值为true
,因此,如果您根本不使用AttributeUsageAttribute
,我假设同样的情况也适用。我的测试似乎与此一致
但正如payo正确指出的那样,AttributeUsageAttribute.Inherited
更像是一种推荐。这是因为有几种方法可以获得某种类型(或其成员)的属性:
对类型调用GetCustomAttributes(inherit:false)
。这样,就不会从基类型继承任何属性,即使它们指定了inherited=true
调用GetCustomAttributes(inherit:true)
。这是真正尊重AttributeUsageAttribute.Inherited的值的唯一方法
遍历继承层次结构,并对每个类型调用GetCustomAttributes(inherit:false)
。这样,您可以从基本类型获取所有属性,即使它们指定了Inherited=false
大多数工具可能都会使用#2,因为这是最明智的选择,但肯定不是唯一的选择。是什么阻止了你尝试它?很有趣。这是我的同事在我发表文章后说的。嗯,我可能会。我也可能会留下这个问题,因为我认为这是一个好问题。@bleepzter,如果你找到答案,您应该自己回答这个问题,而不仅仅是“留着不放”。这实际上取决于测试工具如何运行代码。使用反射,您可以看到继承的属性,无论您是否将其指定为AttributeUsage inherited。