Nunit: [Pesanan] tidak mengizinkan duplikat pada TestFixtures, cacat dokumentasi?

Dibuat pada 9 Okt 2018  ·  4Komentar  ·  Sumber: nunit/nunit

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.

Semua 4 komentar

@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:

  1. Atribut apa pun dalam tanda kurung siku berlaku untuk elemen berikutnya dalam kode yang dapat menerima atribut. Dalam hal ini, ini adalah kelasnya.

  2. 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.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat