Apa itu "Stub"?

116

Jadi, dengan melanjutkan resolusi tahun baru saya untuk lebih memahami TDD, saya sekarang mulai bekerja lebih banyak dengan Rhino Mocks .

Satu hal yang ingin saya lakukan adalah memastikan bahwa saya benar-benar memahami apa yang akan saya lakukan, jadi saya ingin memeriksa pemahaman saya tentang apa yang telah saya lihat sejauh ini (dan saya pikir akan lebih baik untuk mendapatkannya di sini sebagai sumber).

Apa itu "Stub"?

Rob Cooper
sumber
6
pertama Anda mengajukan pertanyaan, lalu Anda memberikan jawabannya?
empi
17
Seperti yang dinyatakan dalam pertanyaan - Saya mencari verifikasi bahwa pemahaman saya benar, saya ingin jawabannya ada di sini (baik milik saya atau bukan) untuk memberikan sumber daya tentang pertanyaan yang banyak ditanyakan-tetapi-jarang-dijawab dengan baik ini: )
Rob Cooper
42
Juga menjawab pertanyaan Anda sendiri yang ditunjukkan di FAQ sebagai cara yang valid untuk menggunakan situs - itu harus didorong, pada kenyataannya.
Erik Forbes
Tidak masalah untuk menjawab pertanyaan Anda sendiri, meskipun pertanyaan itu sendiri memiliki terlalu banyak kebisingan (otobiografi), dan tidak menunjukkan upaya untuk menemukan jawaban, tidak ada kecenderungan apa yang telah dilakukan orang tersebut untuk mencoba menemukan jawabannya.
eric

Jawaban:

112

Martin Fowler menulis artikel yang sangat bagus tentang subjek ini. Dari artikel itu:

Meszaros menggunakan istilah Test Double sebagai istilah umum untuk segala jenis objek pura-pura yang digunakan sebagai pengganti objek nyata untuk tujuan pengujian. Namanya berasal dari pengertian Stunt Double dalam film. (Salah satu tujuannya adalah untuk menghindari penggunaan nama yang sudah banyak digunakan.) Meszaros kemudian mendefinisikan empat jenis rangkap:

  • Objek dummy diedarkan tetapi tidak pernah benar-benar digunakan. Biasanya mereka hanya digunakan untuk mengisi daftar parameter.
  • Objek palsu sebenarnya memiliki implementasi yang berfungsi, tetapi biasanya mengambil jalan pintas yang membuatnya tidak cocok untuk produksi (database dalam memori adalah contoh yang baik).
  • Stubs memberikan jawaban terekam untuk panggilan yang dilakukan selama pengujian, biasanya tidak menanggapi sama sekali apa pun di luar program yang telah diprogram untuk pengujian tersebut. Stub juga dapat merekam informasi tentang panggilan, seperti rintisan gateway email yang mengingat pesan yang 'dikirim', atau mungkin hanya berapa banyak pesan yang 'dikirim'.
  • Ejekan adalah apa yang kita bicarakan di sini: objek yang telah diprogram sebelumnya dengan ekspektasi yang membentuk spesifikasi panggilan yang diharapkan diterima.

Untuk menjelaskannya dengan kata-kata saya sendiri: objek tiruan "mengharapkan" metode tertentu untuk dipanggil, dan biasanya menyebabkan pengujian unit gagal jika harapan mereka tidak terpenuhi. Objek stub menyediakan respons terekam (dan dapat dibuat secara otomatis oleh pustaka helper), tetapi biasanya tidak secara langsung menyebabkan pengujian unit gagal. Mereka biasanya hanya digunakan sehingga objek yang Anda uji mendapatkan data yang dibutuhkan untuk melakukan tugasnya.

Ross
sumber
2
Lalu apa perbedaan antara benda palsu dan sutbs? Seperti yang Anda katakan, mereka memiliki peran yang sama untuk diimplementasikan, bukan?
LKM
4
@LKM objek palsu adalah objek aktual yang mengimplementasikan fungsionalitas nyata dan melakukan berbagai hal. Rintisan hanyalah "jawaban kaleng" misalnya. hasil JSON kode keras yang meniru apa yang akan dikembalikan dari server web.
pengguna3344977
31

Sebuah "rintisan" adalah implementasi dari antarmuka yang ada untuk menyediakan data / semacam tanggapan. Sebagai contoh:

  • sebuah DataSet
  • daftar Pengguna
  • sebuah File Xml

Biasanya ini akan disediakan oleh layanan lain (baik itu Layanan Web, aplikasi lain, database) tetapi untuk meningkatkan kemampuan pengujian kode, hasilnya "dipalsukan".

Manfaat utama dari hal ini adalah memungkinkan pernyataan dibuat dalam pengujian unit berdasarkan data yang diharapkan. Jika kesalahan muncul karena kesalahan data, maka tes dapat dengan mudah ditambahkan, rintisan baru dibuat (mereplikasi kesalahan data) dan kode yang dihasilkan untuk memperbaiki kesalahan tersebut.

Rintisan berbeda untuk mengolok-olok dalam bahwa mereka digunakan untuk mewakili dan menguji keadaan suatu objek, sedangkan Mock tes nya interaksi .

Rob Cooper
sumber
terima kasih atas jawaban Anda, tetapi saya masih tidak mengerti: "implementasi dari sebuah antarmuka" ??
BKSpurgeon
6

Saya yakin "rintisan" berasal dari STartUpBlock. ini digunakan untuk merujuk ke bagian kode yang dibuat secara otomatis untuk membantu Anda, pengembang, memulai.

Keris
sumber
1
Saya rasa ini tidak benar. Mungkin berasal dari praktik ini dalam konstruksi rumah: hunker.com/12000314/what-is-a-stub-out
mattdm
3

Sebuah "rintisan" atau "metode rintisan" dirancang untuk menjadi kode awal atau pengganti sementara untuk kode yang belum dikembangkan. Ini adalah kode bawaan yang dihasilkan oleh IDE. Metode rintisan sebenarnya adalah metode yang digunakan untuk menguji metode kelas tertentu. Ini digunakan dengan memasukkan beberapa nilai untuk variabel lokal dalam metode pengembangan aktual Anda dan memeriksa apakah hasilnya benar. Penting untuk menemukan bug dalam kode Anda.

Nasserr
sumber
Jawaban ini akan lebih baik jika dijelaskan lebih detail: apa tujuan dari metode stub? bagaimana ini digunakan? mengapa ini penting?
Evan Weissburg
Terima kasih! Saya baru mengenal pemrograman dan baru mulai belajar tentang Pengembangan Perangkat Lunak. Sejauh ini, inilah yang saya pahami tentang metode rintisan. Jadi saya tidak begitu yakin apa tujuan, pentingnya, dan bagaimana itu digunakan. Tapi saya pikir metode rintisan sebenarnya adalah metode yang digunakan untuk menguji metode kelas tertentu. Ini digunakan dengan memasukkan beberapa nilai untuk variabel lokal dalam metode pengembangan aktual Anda dan memeriksa apakah hasilnya benar. Penting untuk menemukan bug pada kode Anda. Jika Anda memiliki sesuatu yang lain untuk ditambahkan atau diperbaiki, silakan berikan komentar. Saya baru saja belajar tentang pengujian.
Nasserr
1
Senang sekali Anda belajar! Anda harus mengedit jawaban asli Anda sehingga pembaca selanjutnya dapat dengan mudah mempelajarinya daripada memposting di komentar. Selain itu - jika Anda tidak yakin tentang sesuatu, mengapa Anda memposting jawaban resmi tentang hal itu?
Evan Weissburg
1
Tidak apa-apa jika Anda seorang pembelajar mandiri - di StackOverflow, Anda tidak perlu memposting jawaban kecuali Anda yakin tentang itu. Ini bukan forum standar. Lihat: stackoverflow.com/tour
Evan Weissburg
1
Terima kasih banyak atas panduan dan sarannya. Sangat menghargai itu!
Nasserr
3

Saya menghadapi pertanyaan baru-baru ini dan menyadari bahwa perbandingan antara Stub dan Driver ini sangat jelas dan membantu:

Pada dasarnya, stub dan driver adalah rutinitas yang sebenarnya tidak melakukan apa pun kecuali mendeklarasikan diri mereka sendiri dan parameter yang mereka terima. Sisa kode kemudian dapat mengambil parameter ini dan menggunakannya sebagai input.

+ --------- + ------------------------------- + ------- ------------------------ +
| | Stub | Sopir |
+ --------- + ------------------------------- + ------- ------------------------ +
| Ketik | Kode boneka | Kode boneka |
+ --------- + ------------------------------- + ------- ------------------------ +
| Digunakan dalam | Integrasi Top Down | Integrasi Bottom Up |
+ --------- + ------------------------------- + ------- ------------------------ +
| Tujuan | Untuk memungkinkan pengujian atas | Untuk memungkinkan pengujian yang lebih rendah |
| | tingkat kode, saat | tingkat kode, saat |
| | tingkat yang lebih rendah dari kode adalah | tingkat atas kode adalah |
| | belum berkembang. | belum berkembang. |
+ --------- + ------------------------------- + ------- ------------------------ +
| Contoh | A dan B adalah komponen. | A dan B adalah komponen. |
| | A ---> B | A ---> B |
| | | |
| | A telah dikembangkan. | A masih perlu dikembangkan. |
| | B masih perlu dikembangkan. | B telah dikembangkan. |
| | Oleh karena itu, rintisan digunakan | Oleh karena itu, driver digunakan |
| | di tempat B untuk menirunya. | di tempat A untuk meniru itu |
| | | |
| | A ---> Stub | Sopir ---> B |
+ --------- + ------------------------------- + ------- ------------------------ +

Dari Perbedaan antara Stub dan Driver

Vahid Hallaji
sumber
0

Setelah beberapa penelitian dan berdasarkan file rintisan yang saya hadapi selama hidup coder saya, saya akan mengatakan bahwa file rintisan hanyalah file yang berisi seluruh atau sebagian dari implementasi file. Ini membantu pengembang untuk memulai pengkodean.

Deric Lima
sumber