xUnit などの単体テスト フレームワークは、データ駆動型テストに便利な機能を提供します。ただし、テスト対象のメソッドのパラメーターがカスタム クラスのリストなどの複雑なデータ構造である場合、InlineData 属性では不十分です。
この課題に取り組むには、次のようにします。 xUnit には、複雑なパラメーターを理論主導の単体テストに渡すためのいくつかのオプションが用意されています。そのようなオプションの 1 つが MemberData 属性です。
MemberData 属性を使用すると、IEnumerable
[Theory, MemberData(nameof(MyCustomData))] public void WriteReportsToMemoryStream(...) { // ... } public static IEnumerable<object[]> MyCustomData() { // ... }
xUnit 2.0 より前には、別の代替アプローチ、ClassData が存在していました。 MemberData と同様に、ClassData では、異なるクラスや名前空間のテスト間でデータ ジェネレーターを共有できました。例:
public class MyCustomTests { [Theory, ClassData(typeof(MyCustomData))] public void WriteReportsToMemoryStream(...) { // ... } } public class MyCustomData : IEnumerable<object[]> { // ... }
xUnit 2.0 では、他のクラスから静的メンバーを直接使用できるようにする MemberData のオーバーロード バージョンが導入されました。上記の ClassData の例は、次のオーバーロードを使用して書き換えることができます。
[Theory, MemberData(nameof(MyCustomData.GetData), MemberType = typeof(MyCustomData))] public void WriteReportsToMemoryStream(...) { // ... }
これらの例は、MemberData、ClassData、およびそれぞれの過負荷。これらの属性を活用することで、開発者は複雑なデータ構造で動作するメソッドをテストするためのデータを簡単に生成できます。
以上がxUnit の理論主導の単体テストに複雑なパラメーターを渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。