-1

いくつかのコード化された UI テストに VS2010 テスト フレームワークを使用したいと考えています。次の基本テストクラスをセットアップしました。

[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]and属性にはandメンバー[TestCleanup]がありません。AttributeUsage=Inherited

を継承する子クラスのインスタンスは、TestObjectBaseそれらの属性をそれ自体に伝播しますか ([CodedUITest]とそのメンバーの場合 ( と の場合[TestInitialize]) [TestCleanup])?

4

1 に答える 1

0

プロパティのデフォルト値はであるためAttributeUsageAttribute.Inheritedtrueまったく使用しない場合も同じことが当てはまると思います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 に答える