Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#类继承中虚拟基类方法/成员的属性_C#_Unit Testing_C# 4.0_Coded Ui Tests_Vs Unit Testing Framework - Fatal编程技术网

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

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() {

我想将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=
成员

继承自
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。