5

以前に単体テスト フレームワークを作成したことがないので、アセンブリ内の特定の型をすべて同様のことについてテストする必要がある場合、継承可能な Fact 属性を使用すると、抽象テスト クラスまたはテスト インターフェイスを簡単に作成できるように思えます。

Fact が継承できない設計上の理由はありますか? 属性を使用してテスト メソッドを識別する他のテスト フレームワーク (NUnit、MSTest、MbUnit など) も同様に設計されていると思います。私は何が欠けていますか?

xunit (バージョン 1.9.1.1600) の FactAttribute は次のようになります。

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class FactAttribute : Attribute
{

代わりに次のように見えない理由を理解しようとしています。

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class FactAttribute : Attribute
{ 
4

3 に答える 3

2

私は自分のテストでテンプレート パターンをよく使用します (これはあなたが達成しようとしているようです)。xUnit.net で問題なく動作します。

public abstract class TestBase
{
    [Fact]
    public void Verify()
    {
        // Step 1
        // Step 2

        // Overridable step 3
        DoStuff();

        // Assert
    }

    protected abstract void DoStuff();
}

public class Test1 : TestBase
{
    protected override void DoStuff()
    {
        // Test1 variation
    }
}

public class Test2 : TestBase
{
    protected override void DoStuff()
    {
        // Test2 variation
    }
}

Verify は 2 回実行されます。1 回はインスタンス Test1 で実行され、もう 1 回は Test2 のインスタンスで実行されます。

お役に立てれば。

于 2012-09-21T22:35:54.807 に答える
2

FactAttribute は継承可能です。

この記事をご覧ください: http://iridescence.no/post/Extending-xUnit-with-a-Custom-ObservationAttribute-for-BDD-Style-Testing.aspx

たまには本当に重宝すると思います。

于 2012-07-31T12:39:44.093 に答える
1

クラスのように、属性が継承可能であることは聞いたことがありません。一般的なテスト メソッドを使用して基底クラスを作成し、派生クラスのメソッドに [Fact] 属性を適用しても問題はありません。

于 2012-07-18T16:23:41.463 に答える