Menurut dokumentasi: https://github.com/nunit/docs/wiki/Order-Attribute
OrderAttribute dapat ditempatkan pada metode pengujian atau perlengkapan untuk menentukan urutan pengujian yang dijalankan.
Saya tidak melihat dokumentasi ini dihormati dalam dua cara yang berbeda.
Pertimbangkan kasus TextFixture berikut
[TestFixture("A", false)]
[TestFixture("B", false)]
[TestFixture("A", true)]
[TestFixture("B", true)]
Ini menurut saya lebih sebagai cacat dokumentasi/pemahaman daripada apa pun, tetapi cara dokumen yang ditautkan menyatakan "_or fixture_" menyiratkan kepada saya bahwa saya dapat menulis
[TestFixture("A", false), Order(0)]
[TestFixture("B", false), Order(1)]
[TestFixture("A", true), Order(2)]
[TestFixture("B", true), Order(3)]
Padahal pada kenyataannya ini adalah kesalahan kompiler untuk 1, 2 dan 3
Atribut 'Pesanan' duplikat
Akan sangat bagus jika ini bekerja secara intuitif dengan duplikat.
@Aarskin Ini membantu kami (pengembang NUnit) dan pengguna jika diskusi tentang satu masalah disimpan dalam satu masalah gitHub.
Varian yang Anda gambarkan di sini pada dasarnya sama dengan #3055. Yaitu, ini...
[TestFixture("A", false), Order(0)]
[TestFixture("B", false), Order(1)]
[TestFixture("A", true), Order(2)]
[TestFixture("B", true), Order(3)]
sama seperti jika Anda telah menulis ...
[TestFixture("A", false)]
[TestFixture("A", true)]
[TestFixture("B", true)]
[TestFixture("B", false)]
[Order(3)]
[Order(2)]
[Order(1)]
[Order(0)]
serta urutan lain dari delapan atribut yang ingin Anda gunakan. Keempat atribut TestFixture
semuanya ditempatkan pada kelas yang sama, menyebabkan NUnit membuat instance kelas tersebut empat kali. Empat atribut Order
juga ditempatkan pada kelas yang sama, menyebabkan konflik karena tes mungkin hanya memiliki satu urutan.
Ini __not__ batasan NUnit. Begitulah cara kerja sintaks atribut C#. Ada dua poin penting yang perlu diperhatikan:
Atribut apa pun dalam tanda kurung siku berlaku untuk elemen berikutnya dalam kode yang dapat menerima atribut. Dalam hal ini, ini adalah kelasnya.
Barisan atribut dalam kurung siku, seperti [A, B, C] memiliki arti yang sama persis dengan barisan yang sama dalam pasangan kurung yang terpisah, seperti [A] [B] [C].
Sebagai masalah gaya, saya menghindari penggunaan sintaks koma dengan atribut yang menyebabkan banyak contoh pengujian dibuat, karena itu menyebabkan kebingungan.
Ini dapat disusun ulang untuk mengizinkan properti/parameter Order
pada TestFixture
, tetapi sebelum kami mempertimbangkannya, dapatkah Anda memberi kami kasus penggunaan? Umumnya Order
digunakan untuk menjalankan tes integrasi dalam urutan di mana Anda melakukan bagian dari operasi yang lebih lama secara berurutan dalam pengujian Anda. TestFixture
berparameter biasanya digunakan untuk menguji pengujian yang sama dengan data masukan yang berbeda. Saya tidak dapat memikirkan skenario di mana Anda ingin melakukannya dalam urutan tertentu.
Kasus penggunaan saya adalah uji regresi bisnis logis, dan properti/parameter pada TestFixture saya tidak dapat memesan dengan cara saya ingin menggunakan NUnit. Lebih dari sebelumnya, kerangka kerja ini digunakan tidak hanya untuk pengujian unit.
Sebagai solusinya, Anda dapat beralih ke TestFixtureSource
alih-alih beberapa atribut TestFixture
. Asalkan hanya ada satu TestFixtureSourceAttribute
, perlengkapan akan dijalankan sesuai urutan Anda mengembalikan datanya.