Melalui jenis data mudah seperti rentetan, integer dan beregu sebagai parameter kepada ujian [Teori] dalam Xunit adalah mudah menggunakan atribut seperti InlineData. Walau bagaimanapun, untuk parameter yang lebih kompleks, persoalan timbul tentang cara menyediakan data sedemikian.
XUnit menawarkan atribut MemberData, yang membolehkan anda mengembalikan IEnumerable
Contohnya:
public class StringTests { [Theory, MemberData(nameof(SplitCountData))] public void SplitCount(string input, int expectedCount) { Assert.Equal(expectedCount, input.Split(' ').Length); } public static IEnumerable<object[]> SplitCountData => new List<object[]> { { "xUnit", 1 }, { "is fun", 2 }, { "to test with", 3 } }; }
Sebelum Xunit 2.0, anda boleh gunakan atribut ClassData untuk berkongsi penjana data antara ujian dalam kelas yang berbeza.
Untuk contoh:
public class StringTests { [Theory, ClassData(typeof(IndexOfData))] public void IndexOf(string input, char letter, int expected) { Assert.Equal(expected, input.IndexOf(letter)); } } public class IndexOfData : IEnumerable<object[]> { // ... data and methods }
Dalam Xunit 2.0 dan lebih baru, MemberData boleh mengambil parameter MemberType untuk menentukan ahli statik daripada kelas lain.
Untuk contoh:
public class StringTests { [Theory] [MemberData(nameof(IndexOfData.SplitCountData), MemberType = typeof(IndexOfData))] public void SplitCount(string input, int expectedCount) { Assert.Equal(expectedCount, input.Split(' ').Length); } }
Sebagai alternatif, anda masih boleh menggunakan ClassData jika anda lebih suka pemisahan antara penjana data dan kaedah ujian.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Lulus Parameter Kompleks kepada Ujian [Teori] Xunit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!