Apakah ada cara dalam kerangka xUnit.net yang mirip dengan fitur NUnit berikut?
[Test, TestCaseSource("CurrencySamples")]
public void Format_Currency(decimal value, string expected){}
static object[][] CurrencySamples = new object[][]
{
new object[]{ 0m, "0,00"},
new object[]{ 0.0004m, "0,00"},
new object[]{ 5m, "5,00"},
new object[]{ 5.1m, "5,10"},
new object[]{ 5.12m, "5,12"},
new object[]{ 5.1234m, "5,12"},
new object[]{ 5.1250m, "5,13"}, // round
new object[]{ 5.1299m, "5,13"}, // round
}
Ini akan menghasilkan 8 tes terpisah di NUnit GUI
[TestCase((string)null, Result = "1")]
[TestCase("", Result = "1")]
[TestCase(" ", Result = "1")]
[TestCase("1", Result = "2")]
[TestCase(" 1 ", Result = "2")]
public string IncrementDocNumber(string lastNum) { return "some"; }
Ini akan menghasilkan 5 pengujian terpisah dan secara otomatis membandingkan hasil ( Assert.Equal()
).
[Test]
public void StateTest(
[Values(1, 10)]
int input,
[Values(State.Initial, State.Rejected, State.Stopped)]
DocumentType docType
){}
Ini akan menghasilkan 6 tes kombinatorial. Tak ternilai.
Beberapa tahun yang lalu saya mencoba xUnit dan menyukainya tetapi tidak memiliki fitur ini. Tidak bisa hidup tanpa mereka. Apakah ada yang berubah?
Jawaban:
xUnit menawarkan cara untuk menjalankan pengujian berparameter melalui sesuatu yang disebut teori data . Konsepnya setara dengan yang ditemukan di NUnit tetapi fungsionalitas yang Anda keluarkan tidak selengkap itu.
Berikut contohnya:
Dalam contoh ini xUnit akan menjalankan
Should_format_the_currency_value_correctly
pengujian sekali untuk setiapInlineDataAttribute
kali meneruskan nilai yang ditentukan sebagai argumen.Teori data adalah titik perpanjangan yang dapat Anda gunakan untuk membuat cara baru untuk menjalankan pengujian berparameter Anda. Cara melakukannya adalah dengan membuat atribut baru yang memeriksa dan secara opsional bertindak berdasarkan argumen dan nilai kembalian dari metode pengujian.
Anda dapat menemukan contoh praktis yang baik bagaimana teori Data xUnit dapat diperpanjang di AutoFixture 's Autodata dan InlineAutoData teori.
sumber
[Theory]
atribut tidak tersedia.Izinkan saya membuang satu sampel lagi di sini, kalau-kalau itu menghemat waktu seseorang.
sumber
Pada permintaan pertama Anda, Anda dapat mengikuti contoh yang ditemukan di sini .
Anda dapat membuat kelas statis yang berisi data yang diperlukan untuk kumpulan pengujian
Kemudian, dengan menggunakan atribut MemberData, tentukan pengujian seperti itu
atau jika Anda menggunakan C # 6.0,
Argumen pertama MemberDataAttribute memungkinkan Anda untuk menentukan anggota yang Anda gunakan sebagai sumber data, sehingga Anda memiliki fleksibilitas yang cukup saat digunakan kembali.
sumber
Menurut artikel ini di xUnit Anda memiliki tiga opsi "parametrization":
Contoh InlineData
Contoh ClassData
Contoh MemberData
sumber
Saya menemukan perpustakaan yang menghasilkan fungsionalitas yang setara dengan
[Values]
atribut NUnit yang disebut Xunit.Combinatorial :Ini memungkinkan Anda untuk menentukan nilai tingkat parameter:
Atau Anda dapat secara implisit membuatnya mengetahui jumlah minimal pemanggilan untuk mencakup semua kemungkinan kombinasi:
sumber
Saya mengambil semua jawaban di sini dan juga memanfaatkan
TheoryData<,>
tipe generik XUnit untuk memberi saya definisi data yang sederhana, mudah dibaca dan diketik untuk atribut 'MemberData' pada pengujian saya, sesuai contoh ini:NB Menggunakan VS2017 (15.3.3), C # 7, & XUnit 2.2.0 untuk .NET Core
sumber