Saya memiliki kebiasaan untuk selalu mencoba membedakan kode tingkat aplikasi dari kode tingkat kerangka kerja, jadi saya telah menemui masalah yang sering Anda jelaskan: Anda biasanya ingin semua kode tingkat kerangka kerja diuji sebelum kode tingkat aplikasi mana pun mulai diuji. . Juga, bahkan dalam kode tingkat kerangka kerja, cenderung ada beberapa modul kerangka dasar yang digunakan oleh semua modul kerangka kerja lainnya, dan jika ada sesuatu yang gagal dalam fundamental, tidak ada gunanya menguji hal lain.
Sayangnya, pemasok kerangka pengujian cenderung memiliki ide-ide yang agak kaku tentang bagaimana kreasi mereka dimaksudkan untuk digunakan, dan agak protektif terhadap ide-ide itu, sementara orang-orang yang menggunakan kerangka kerja mereka cenderung menerima penggunaan yang dimaksud tanpa mempertanyakan. Ini bermasalah, karena menghambat eksperimen dan inovasi. Saya tidak tahu tentang orang lain, tetapi saya lebih suka memiliki kebebasan untuk mencoba melakukan sesuatu dengan cara yang aneh, dan melihat sendiri apakah hasilnya lebih baik atau lebih buruk daripada cara yang ditetapkan, daripada tidak memiliki kebebasan untuk melakukan hal-hal dengan cara saya di tempat pertama.
Jadi, menurut saya, dependensi tes akan menjadi hal yang luar biasa, dan sebagai pengganti, kemampuan untuk menentukan urutan tes yang akan dieksekusi akan menjadi hal terbaik berikutnya.
Satu-satunya cara yang saya temukan untuk mengatasi masalah pemesanan tes adalah dengan penamaan hati-hati, sehingga dapat mengeksploitasi kecenderungan kerangka pengujian untuk menjalankan tes dalam urutan abjad.
Saya tidak tahu bagaimana ini bekerja di Visual Studio, karena saya belum melakukan apa pun yang melibatkan pengujian ekstensif dengan C #, tetapi di sisi Jawa dunia ini berfungsi sebagai berikut: Di bawah folder sumber proyek kami biasanya memiliki dua subfolder, satu disebut "utama", berisi kode produksi, dan satu disebut "tes", yang berisi kode pengujian. Di bawah "main" kami memiliki hierarki folder yang persis sesuai dengan hierarki paket dari kode sumber kami. Paket Java kira-kira sesuai dengan ruang nama C #. C # tidak mengharuskan Anda untuk mencocokkan hierarki folder dengan hirarki namespace, tetapi disarankan untuk melakukannya.
Sekarang, apa yang biasanya dilakukan orang di dunia Java adalah bahwa di bawah folder "test" mereka mencerminkan hierarki folder yang ditemukan di bawah folder "utama", sehingga setiap tes berada dalam paket yang sama persis dengan kelas yang diuji. Alasan di balik ini adalah bahwa cukup sering kelas pengujian perlu mengakses anggota-paket pribadi kelas yang diuji, sehingga kelas pengujian harus dalam paket yang sama dengan kelas yang diuji. Di sisi C # dunia tidak ada yang namanya visibilitas namespace-lokal, jadi tidak ada alasan untuk mencerminkan hierarki folder, tapi saya pikir programmer C # kurang lebih mengikuti disiplin yang sama dalam menyusun struktur folder mereka.
Dalam kasus apa pun, saya menemukan seluruh gagasan ini untuk memungkinkan kelas pengujian memiliki akses ke anggota kelas-paket yang sedang diuji salah arah, karena saya cenderung menguji antarmuka, bukan implementasi. Jadi, hierarki folder pengujian saya tidak harus mencerminkan hierarki folder dari kode produksi saya.
Jadi, yang saya lakukan adalah memberi nama folder (artinya, paket) dari pengujian saya sebagai berikut:
t001_SomeSubsystem
t002_SomeOtherSubsystem
t003_AndYetAnotherSubsystem
...
Ini menjamin bahwa semua tes untuk "SomeSubsystem" akan dieksekusi sebelum semua tes untuk "SomeOtherSubsystem", yang pada gilirannya semua akan dieksekusi sebelum semua tes untuk "AndYetAnotherSubsystem", dan seterusnya, dan sebagainya.
Di dalam folder, file uji individual diberi nama sebagai berikut:
T001_ThisTest.java
T002_ThatTest.java
T003_TheOtherTest.java
Tentu saja, ini sangat membantu bahwa IDE modern memiliki kemampuan refactoring yang kuat yang memungkinkan Anda untuk mengubah nama seluruh paket (dan semua sub-paket, dan semua kode yang mereferensikannya) hanya dengan beberapa klik dan penekanan tombol.