Cosa significa stubing in programmazione?


Risposte:


30

Un metodo stub è un metodo che restituisce solo un risultato semplice ma valido (anche se non necessariamente corretto).

In genere sono realizzati durante la costruzione dell'infrastruttura e non si desidera dedicare tempo a tutti i metodi necessari in questo momento. Invece crei stub in modo che tutto venga compilato e il completamento automatico del tuo IDE sia a conoscenza dei metodi che intendi utilizzare.

Un altro posto in cui vengono utilizzati gli stub è il deridere durante il test, si forniscono metodi di stub invece della normale dipendenza attraverso l'iniezione di dipendenza che restituisce risultati fissi e quindi si assicura che il codice faccia la cosa giusta con loro. Ciò isola i test sul codice che si sta tentando di testare e significa che non è necessario creare un database solo per eseguire tali test.


3
Nitpick: i mozziconi vengono usati durante la mozzata, non durante la beffa. Quando deridi, usi le beffe. martinfowler.com/articles/mocksArentStubs.html
Jörg W Mittag

+1 per quanto sopra, ma vorrei aggiungere che, se non ti aspetti che vengano ancora utilizzati i metodi stubbed, può essere utile che gli stub generino un'eccezione o generino un errore. Esempio "NotImplementedException": msdn.microsoft.com/en-us/library/… commons.apache.org/proper/commons-lang/javadocs/api-release/org/…
Dan Armstrong

6

Forse è meglio rispondere a questo con un esempio concreto. Consideriamo il caso in cui stai creando un'applicazione desktop. Hai deciso di avere una funzione denominata createMenubar, createToolbare createMainin modo che il costruttore di applicazione è pulito e ordinato.

Il tuo codice principale sarà simile a questo (questo esempio è in Python):

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

Fino a quando tutto funzionerà, la tua funzione principale fallirà, quindi come puoi testare la tua app durante lo sviluppo? Ad esempio, se inizi a lavorare su createMenubar, l'inizializzazione fallirà dopo aver creato la barra dei menu poiché non hai implementato la barra degli strumenti o l'area principale della GUI.

È qui che entrano in gioco gli stub. Puoi creare una funzione denominata createToolbare createMainche soddisfi i requisiti del costruttore dell'app (vale a dire che esistono queste funzioni), senza doverle effettivamente implementare. Queste funzioni sono stub:

def createToolbar():
    pass

def createMain():
    pass

Con quegli stub in atto puoi iniziare ad implementare il programma principale e la barra dei menu, senza doversi preoccupare dei dettagli della barra degli strumenti o della parte principale del programma. Alla fine passerai alla barra degli strumenti e sostituirai lo stub con la funzione effettiva. E infine, rimuoverai lo stub per createMaine darai una vera implementazione.

Nota che gli stub non devono necessariamente fare nulla. Questi stub potrebbero, ad esempio, creare un widget contenitore vuoto che il costruttore dell'app può disporre. Il punto è che crei funzioni fittizie o oggetti che fanno quanto basta per consentire l'esecuzione dell'altro codice mentre lo stai sviluppando. Con il passare del tempo si sostituiscono gli stub uno per uno fino al completamento dell'applicazione.


2

Uno "stub" viene utilizzato nella programmazione "top down". Questo è quando stai costruendo la tua applicazione dal generale allo specifico. In tal modo, utilizzerai "stub" come "segnaposto" per le applicazioni specifiche che non hai avuto il tempo di creare. Spesso restituiscono cose come valori fittizi o casuali nella parte più generale del programma. Va bene, lo stub fornisce abbastanza valore per far funzionare la parte più "senior" del programma. Fino a quando non è il momento di sostituire o montare lo stub con il suo vero calcolo o valore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.