Unit Pengujian mengacu pada apa yang Anda menguji, TDD untuk saat Anda menguji.
Keduanya orthogonal.
Unit Testing berarti, baik, menguji unit perilaku individu. Unit perilaku individu adalah unit perilaku terkecil yang dapat diuji secara terpisah. (Saya tahu bahwa kedua definisi itu melingkar, tetapi dalam praktiknya tampaknya cukup berhasil.)
Anda dapat menulis unit test sebelum Anda menulis kode Anda, setelah Anda menulis kode Anda atau saat Anda menulis kode Anda.
TDD berarti (sekali lagi, agak jelas) membiarkan tes Anda mendorong pengembangan Anda (dan desain Anda). Anda dapat melakukannya dengan tes unit, tes fungsional, dan tes penerimaan. Biasanya, Anda menggunakan ketiganya.
Bagian terpenting dari TDD adalah D tengah . Anda membiarkan tes mendorong Anda. Tes memberi tahu Anda apa yang harus dilakukan, apa yang harus dilakukan selanjutnya, ketika Anda selesai. Mereka memberi tahu Anda apa yang akan menjadi API, apa desainnya. (Ini penting: TDD bukan tentang menulis tes terlebih dahulu. Ada banyak proyek yang menulis tes terlebih dahulu tetapi jangan berlatih TDD. Tes menulis terlebih dahulu hanyalah prasyarat untuk dapat membiarkan tes mendorong pengembangan.)
Unit Testing adalah komponen dari Test Driven Development
Anda dapat melakukan pengujian unit tanpa melakukan pengembangan berbasis pengujian. Namun Anda tidak dapat melakukan pengembangan yang didorong oleh tes tanpa menggunakan unit test.
Ketika Anda melakukan pengujian unit tradisional , Anda menulis tes setelah Anda menulis kode Anda.
Pendekatan pengembangan yang digerakkan oleh tes adalah menulis unit test sebelum menulis kode.
Keuntungan paling menarik dari TDD (IMHO) dibandingkan dengan Unit Testing sederhana:
sumber
TDD dan Unit Testing adalah dua istilah yang sangat spesifik yang sering disalahgunakan.
TDD sedang menulis tes yang akan gagal, kemudian menulis jumlah minimum kode yang diperlukan untuk membuatnya berjalan, kemudian refactoring kode untuk membuatnya bersih. Ini dilakukan dalam siklus, gagal -> lulus -> refactor, menambahkan tes baru untuk setiap persyaratan yang diketahui untuk kode. Baru-baru ini, TDD telah menjadi lebih khusus lagi tentang penulisan unit test dalam siklus itu, untuk membedakannya dari ATDD (subset dari BDD) yang menulis tes penerimaan dalam siklus yang sama.
Unit Testing adalah tentang menguji kode dalam unit kecil yang terisolasi. Kebingungan umum di sini adalah berpikir bahwa jika Anda menggunakan alat pengujian unit, seperti xUnit atau Rspec, untuk menjalankan tes yang Anda tulis adalah tes unit. Ini belum tentu benar. Alat-alat itu dapat digunakan untuk menjalankan tes katakan menggunakan kerangka Selenium - dalam hal ini Anda menulis tes penerimaan menggunakan unit test runner. Tes unit adalah tes yang sangat khusus yang berfokus pada sepotong kecil logika, terisolasi dari segala hal lain demi kecepatan (sehingga Anda dapat menjalankannya sering dan mendapatkan umpan balik cepat tentang bug baru).
sumber
TDD adalah pendekatan penulisan kasus uji sebelum pengembangan seperti yang Anda katakan dan kemudian pengembang menulis kode untuk lulus kasus uji. Unit Testing adalah istilah yang digunakan untuk menggambarkan jenis pengujian lingkup sempit selain pengujian sistem, pengujian integrasi dan pengujian penerimaan.
sumber
TDD adalah pendekatan filosofis untuk menulis kode: tulis tes terlebih dahulu. Tes yang Anda tulis adalah tes unit.
sumber
Cara saya memisahkan keduanya adalah dengan mempertimbangkan bahwa TDD lebih sedikit tentang pengujian, dan lebih banyak tentang merancang kode. Tes unit kemudian digunakan untuk menetapkan harapan untuk kode akhir. Ketika kode akhir ditulis, dan lulus tes (spesifikasi), Anda memiliki kode yang dirancang menggunakan tes.
sumber
Semua jawaban bagus. Saya hanya akan menambahkan bahwa pengujian unit cenderung menganggap 'unit' sebagai komponen kecil, sementara TDD meningkatkan untuk memasukkan tes integrasi dan penerimaan.
(Beberapa varian TDD menganggap 'unit' sebagai langkah inkremental terkecil menuju fungsionalitas yang diinginkan ...)
sumber