ホームページ >バックエンド開発 >C++ >XUnit の [セオリー] メソッドに複雑なパラメーターを渡すにはどうすればよいですか?

XUnit の [セオリー] メソッドに複雑なパラメーターを渡すにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-04 14:50:39284ブラウズ

How Can I Pass Complex Parameters to XUnit's [Theory] Methods?

複雑なパラメータを [理論] に渡す

XUnit は InlineData 属性を提供し、これによりユーザーは単純なデータ パラメータを使用して複数のテストを生成できます。ただし、カスタム クラスのリストなど、より複雑なパラメーターを扱う場合は、別のアプローチが必要になります。

MemberData 属性と ClassData 属性

XUnit には、次のいくつかのオプションが用意されています。複雑なパラメータを [セオリー] メソッドに渡します。 1 つのアプローチは、MemberData 属性を利用することです。この属性は、IEnumerable を返すプロパティを実行するように XUnit に指示します。 IEnumerable 内の各 object[] は、[セオリー] メソッドへの 1 回の呼び出しのパラメーターとして「アンパック」されます。

もう 1 つのオプションは、ClassData 属性を使用することです。 ClassData は MemberData と同様に動作しますが、異なるクラスまたは名前空間のテスト間でデータ ジェネレーターを共有できます。また、「データ ジェネレーター」を実際のテスト メソッドから分離します。

静的メンバー サポートを使用した ClassData の例

静的メンバー サポートを使用して ClassData を使用するには、図に示すように、IEnumerable を返す静的プロパティを持つクラス以下:

public class IndexOfData
{
    public static IEnumerable<object[]> SplitCountData => 
        new List<object[]>
        {
            new object[] { "hello world", 'w', 6 },
            new object[] { "goodnight moon", 'w', -1 }
        };
}

テスト クラスで、[セオリー] 属性を適用し、属性の MemberType プロパティを使用して静的メンバーを指定できます。

[Theory, MemberData(nameof(IndexOfData.SplitCountData), MemberType = typeof(IndexOfData))]
public void IndexOf(string input, char letter, int expected) {...}

これらを活用することで、属性を使用すると、[セオリー] メソッドに複雑なパラメーターを渡すことができ、さまざまなシナリオを効率的にテストできるようになります。

以上がXUnit の [セオリー] メソッドに複雑なパラメーターを渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。