ホームページ >バックエンド開発 >C++ >複雑なパラメーターを xUnit 理論テストに渡すにはどうすればよいですか?

複雑なパラメーターを xUnit 理論テストに渡すにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-04 10:28:35612ブラウズ

How Can I Pass Complex Parameters to xUnit Theory Tests?

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

Xunit では、InlineData 属性を使用して、提供されたデータ セットごとに個別のテストを作成できます。ただし、メソッドがカスタム オブジェクトのリストなどの複雑なパラメーターを受け取る場合はどうすればよいでしょうか?

この状況に対処するために、XUnit は MemberData 属性を提供します。 IEnumerable を返すプロパティを定義すると、解凍されて Theory メソッドに個別のパラメーターとして渡されるオブジェクトの配列を生成できます。以下に例を示します。

MemberData 例:

public class StringTests2
{
    [Theory, MemberData(nameof(SplitCountData))]
    public void SplitCount(string input, int expectedCount)
    {
        var actualCount = input.Split(' ').Count();
        Assert.Equal(expectedCount, actualCount);
    }

    public static IEnumerable<object[]> SplitCountData =>
        new List<object[]>
        {
            new object[] { "xUnit", 1 },
            new object[] { "is fun", 2 },
            new object[] { "to test with", 3 }
        };
}

XUnit バージョン 2.0 以降では、IEnumerable< を返すメソッドで [MemberData] 属性を使用できます。オブジェクト[]>。次の例はこれを示しています:

オーバーロードされた MemberData の例:

public class StringTests3
{
    [Theory, MemberData(nameof(IndexOfData.SplitCountData), MemberType = typeof(IndexOfData))]
    public void IndexOf(string input, char letter, int expected)
    {
        var actual = input.IndexOf(letter);
        Assert.Equal(expected, actual);
    }
}

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

これらの手法を利用することで、複雑なパラメーターを理論テストに効果的に渡すことができます。

以上が複雑なパラメーターを xUnit 理論テストに渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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