Cara saya melihatnya, Anda berdua memiliki keuntungan, dan Anda berada pada "kerugian" (sic).
Keuntungannya adalah Anda memiliki sistem yang membuat Anda nyaman, dan yang berfungsi untuk Anda. Anda senang bahwa itu mengkonfirmasi validitas produk Anda, dan Anda mungkin tidak akan menemukan nilai bisnis dalam mencoba mengubah semua tes Anda untuk sesuatu yang menggunakan kerangka kerja yang berbeda. Jika Anda dapat memperbaiki kode Anda, dan tes Anda mengambil perubahan - atau lebih baik lagi, jika Anda dapat memodifikasi tes Anda dan kode Anda yang ada gagal tes sampai refactored, maka Anda memiliki semua pangkalan Anda tercakup. Namun...
Salah satu keuntungan dari memiliki API pengujian unit yang dirancang dengan baik adalah bahwa ada banyak dukungan asli di sebagian besar IDE modern. Ini tidak akan memengaruhi hard-core VI dan emacs pengguna di luar sana yang mencibir pada pengguna Visual Studio di luar sana, tetapi bagi mereka yang menggunakan yang menggunakan IDE yang baik, Anda memiliki kemampuan untuk men-debug tes Anda dan menjalankannya dalam IDE itu sendiri. Ini bagus, namun ada keuntungan yang lebih besar tergantung pada kerangka yang Anda gunakan, dan itu dalam bahasa yang digunakan untuk menguji kode Anda.
Ketika saya mengatakan bahasa , saya tidak berbicara tentang bahasa pemrograman, tetapi saya berbicara tentang kumpulan kata kaya yang dibungkus dalam sintaks yang fasih yang membuat kode tes dibaca seperti sebuah cerita. Secara khusus, saya telah menjadi advokat untuk penggunaan kerangka kerja BDD . API DotNet BDD favorit pribadi saya adalah StoryQ, tetapi ada beberapa yang lain dengan tujuan dasar yang sama, yaitu untuk mengambil konsep dari dokumen persyaratan, dan menulisnya dalam kode dengan cara yang mirip dengan bagaimana itu ditulis dalam spesifikasi. Namun API yang benar-benar baik melangkah lebih jauh, dengan mencegat setiap pernyataan individu dalam suatu pengujian dan menunjukkan apakah pernyataan itu dijalankan dengan sukses, atau gagal. Ini sangat berguna, karena Anda bisa melihat seluruh tes dieksekusi tanpa kembali lebih awal, yang berarti upaya debug Anda menjadi sangat efisien karena Anda hanya perlu memusatkan perhatian Anda pada bagian-bagian dari tes yang gagal, tanpa perlu men-decode seluruh panggilan urutan. Hal yang menyenangkan lainnya adalah bahwa hasil tes menunjukkan semua informasi ini,
Sebagai contoh dari apa yang saya bicarakan, bandingkan yang berikut ini:
Menggunakan Asserts:
Assert(variable_A == expected_value_1); // if this fails...
Assert(variable_B == expected_value_2); // ...this will not execute
Assert(variable_C == expected_value_3); // ...and nor will this!
Menggunakan API BDD yang lancar:
(Bayangkan bahwa bit yang dicetak miring pada dasarnya adalah pointer metode)
WithScenario("Test Scenario")
.Given(*AConfiguration*) // each method
.When(*MyMethodToTestIsCalledWith*, variable_A, variable_B, variable_C) // in the
.Then(*ExpectVariableAEquals*, expected_value_1) // Scenario will
.And(*ExpectVariableBEquals*, expected_value_2) // indicate if it has
.And(*ExpectVariableCEquals*, expected_value_3) // passed or failed execution.
.Execute();
Sekarang diberikan sintaks BDD lebih lama, dan lebih banyak, dan contoh-contoh ini sangat dibuat-buat, namun untuk situasi pengujian yang sangat kompleks di mana banyak hal berubah dalam suatu sistem sebagai akibat dari perilaku sistem yang diberikan, sintaks BDD menawarkan kepada Anda suatu yang jelas deskripsi tentang apa yang Anda uji, dan bagaimana konfigurasi pengujian Anda telah ditentukan, dan Anda dapat menunjukkan kode ini ke non-programmer dan mereka akan langsung mengerti apa yang sedang terjadi. Selain itu, jika "variabel_A" gagal tes dalam kedua kasus, contoh Asserts tidak akan mengeksekusi melewati pernyataan pertama sampai Anda telah memperbaiki masalah, sementara BDD API akan mengeksekusi setiap metode yang disebut dalam rantai, pada gilirannya, dan menunjukkan mana setiap bagian dari pernyataan tersebut salah.
Secara pribadi saya menemukan pendekatan ini bekerja jauh lebih baik daripada kerangka kerja xUnit yang lebih tradisional dalam arti bahwa bahasa pengujian adalah bahasa yang sama dengan pelanggan Anda akan berbicara tentang persyaratan logis mereka. Meski begitu, saya telah berhasil menggunakan kerangka kerja xUnit dengan gaya yang serupa tanpa perlu menemukan API pengujian lengkap untuk mendukung upaya saya, dan sementara pernyataan itu masih akan membuat hubungan arus pendek yang efektif, mereka membaca dengan lebih bersih. Contohnya:
Menggunakan Nunit :
[Test]
void TestMyMethod()
{
const int theExpectedValue = someValue;
GivenASetupToTestMyMethod();
var theActualValue = WhenIExecuteMyMethodToTest();
Assert.That(theActualValue, Is.EqualTo(theExpectedValue)); // nice, but it's not BDD
}
Jika Anda memutuskan untuk menjelajahi menggunakan API pengujian unit, saran saya adalah untuk bereksperimen dengan sejumlah besar API yang berbeda untuk sementara waktu, dan untuk menjaga dan membuka pikiran tentang pendekatan Anda. Sementara saya pribadi menganjurkan untuk BDD, kebutuhan bisnis Anda sendiri mungkin memerlukan sesuatu yang berbeda untuk keadaan tim Anda. Kuncinya adalah untuk menghindari menebak-nebak sistem yang ada. Anda selalu dapat mendukung tes yang ada dengan beberapa tes menggunakan API lain jika diperlukan, tetapi saya tentu tidak akan merekomendasikan penulisan ulang tes besar hanya untuk membuat semuanya sama. Karena kode lama tidak lagi digunakan, Anda dapat dengan mudah menggantinya dan pengujiannya dengan kode baru, dan pengujian menggunakan API alternatif, dan ini tanpa perlu berinvestasi dalam upaya besar yang tidak selalu memberi Anda nilai bisnis yang nyata. Adapun untuk menggunakan API pengujian unit,