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

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

Barbara Streisand
Barbara Streisandオリジナル
2025-01-02 21:24:41988ブラウズ

How to Pass Complex Parameters to Theory-Driven Unit Tests in xUnit?

理論駆動型の単体テストに複雑なパラメーターを渡す

xUnit などの単体テスト フレームワークは、データ駆動型テストに便利な機能を提供します。ただし、テスト対象のメソッドのパラメーターがカスタム クラスのリストなどの複雑なデータ構造である場合、InlineData 属性では不十分です。

複雑なパラメーターの理論

この課題に取り組むには、次のようにします。 xUnit には、複雑なパラメーターを理論主導の単体テストに渡すためのいくつかのオプションが用意されています。そのようなオプションの 1 つが MemberData 属性です。

MemberData to the Rescue

MemberData 属性を使用すると、IEnumerable を返すプロパティまたはメソッドを指定できます。このシーケンス内の各オブジェクト配列は、各テスト インスタンスのパラメーターを表します。例:

[Theory, MemberData(nameof(MyCustomData))]
public void WriteReportsToMemoryStream(...)
{
    // ...
}

public static IEnumerable<object[]> MyCustomData()
{
    // ...
}

ClassData: 代替アプローチ

xUnit 2.0 より前には、別の代替アプローチ、ClassData が存在していました。 MemberData と同様に、ClassData では、異なるクラスや名前空間のテスト間でデータ ジェネレーターを共有できました。例:

public class MyCustomTests
{
    [Theory, ClassData(typeof(MyCustomData))]
    public void WriteReportsToMemoryStream(...)
    {
        // ...
    }
}

public class MyCustomData : IEnumerable<object[]>
{
    // ...
}

静的メンバーのオーバーロードを使用した MemberData (xUnit >= 2.0)

xUnit 2.0 では、他のクラスから静的メンバーを直接使用できるようにする MemberData のオーバーロード バージョンが導入されました。上記の ClassData の例は、次のオーバーロードを使用して書き換えることができます。

[Theory, MemberData(nameof(MyCustomData.GetData), MemberType = typeof(MyCustomData))]
public void WriteReportsToMemoryStream(...)
{
    // ...
}

結論

これらの例は、MemberData、ClassData、およびそれぞれの過負荷。これらの属性を活用することで、開発者は複雑なデータ構造で動作するメソッドをテストするためのデータを簡単に生成できます。

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

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