Apa artinya stubbing dalam pemrograman?

26

Saya sering mendengar istilah "rintisan", "rintisan sesuatu", "rintisan", dan sebagainya.

Apa arti stubbing dalam pemrograman, dan dari mana kata itu berasal? Dalam konteks apa ia bisa digunakan?

Wazery
sumber
juga disebut: placeholder.
Pieter B
2
XKCD yang

Jawaban:

30

Metode rintisan adalah metode yang hanya mengembalikan hasil yang sederhana namun valid (meskipun tidak harus benar).

Biasanya dibuat ketika membangun infrastruktur dan Anda tidak ingin menghabiskan waktu untuk setiap metode yang dibutuhkan saat ini. Sebaliknya Anda membuat bertopik sehingga semuanya mengkompilasi dan IDE otomatis Anda tahu tentang metode yang Anda rencanakan untuk digunakan.

Tempat lain di mana rintisan digunakan adalah dalam mengejek ketika pengujian, Anda menyediakan metode rintisan alih-alih ketergantungan normal melalui injeksi ketergantungan yang mengembalikan hasil tetap dan kemudian memastikan bahwa kode melakukan hal yang benar dengan mereka. Ini mengisolasi pengujian ke kode yang Anda coba uji dan berarti Anda tidak perlu memutar database hanya untuk menjalankan tes tersebut.

ratchet freak
sumber
3
Nitpick: stubs digunakan ketika stubbing, bukan saat mengejek. Saat mengejek, Anda menggunakan tiruan. martinfowler.com/articles/mocksArentStubs.html
Jörg W Mittag
Memberi +1 untuk yang di atas, tetapi saya ingin menambahkan bahwa, jika Anda tidak mengharapkan metode stubbed untuk digunakan, mungkin ada baiknya Anda memiliki pengecualian bertopik lempar atau jika tidak menghasilkan kesalahan. Contoh "NotImplementedException": msdn.microsoft.com/en-us/library/… commons.apache.org/proper/commons-lang/javadocs/api-release/org/…
Dan Armstrong
6

Mungkin ini yang terbaik dijawab dengan contoh nyata. Mari kita perhatikan kasus di mana Anda membuat aplikasi desktop. Anda telah memutuskan untuk memiliki fungsi bernama createMenubar, createToolbardan createMainagar konstruktor aplikasi Anda rapi dan rapi.

Kode utama Anda akan terlihat seperti ini (contoh ini menggunakan python):

class ExampleApp():
    def __init__(self):
        self.createMenubar()
        self.createToolbar()
        self.createMain()

Sampai semuanya berfungsi, fungsi utama Anda akan gagal, jadi bagaimana Anda bisa menguji aplikasi selama pengembangan? Misalnya, jika Anda mulai bekerja createMenubar, inisialisasi akan gagal setelah itu menciptakan menubar karena Anda belum mengimplementasikan bilah alat atau area utama GUI.

Di sinilah bertopik masuk. Anda dapat membuat fungsi bernama createToolbardan createMainyang memenuhi persyaratan konstruktor aplikasi (yaitu, bahwa fungsi-fungsi ini ada), tanpa harus benar-benar mengimplementasikannya. Fungsi-fungsi ini bertopik:

def createToolbar():
    pass

def createMain():
    pass

Dengan bertopik itu di tempat Anda dapat mulai menerapkan program utama dan menubar, tanpa harus khawatir tentang detail toolbar atau bagian utama dari program. Akhirnya Anda akan pindah ke bilah alat, dan ganti tulisan rintisan dengan fungsi yang sebenarnya. Dan akhirnya, Anda akan menghapus rintisan untuk createMaindan memberikan implementasi yang nyata.

Perhatikan bahwa bertopik tidak perlu melakukan apa pun. Rintisan ini bisa, misalnya, membuat widget wadah kosong yang bisa diletakkan oleh konstruktor aplikasi. Intinya adalah, Anda membuat fungsi dummy atau objek yang cukup untuk membiarkan kode Anda yang lain berjalan saat Anda sedang mengembangkannya. Seiring waktu Anda mengganti bertopik satu per satu sampai aplikasi Anda selesai.

Bryan Oakley
sumber
2

"Rintisan" digunakan dalam pemrograman "top down". Saat itulah Anda sedang membangun aplikasi Anda dari umum ke spesifik. Dengan melakukan itu, Anda akan menggunakan "stubs" sebagai "placeholder" untuk aplikasi spesifik yang belum sempat Anda buat. Mereka sering mengembalikan hal-hal seperti nilai-nilai dummy atau acak ke bagian yang lebih umum dari program ini. Tidak apa-apa, rintisan memberi nilai yang cukup untuk membuat bagian program yang lebih "senior" bekerja. Sampai saatnya rintisan diganti atau dipasang dengan perhitungan atau nilainya yang sebenarnya.

Tom Au
sumber