Sento spesso il termine "stub", "stub qualcosa", "stub" e così via.
Cosa significa stubing in programmazione e da dove viene la parola? In quali contesti può essere utilizzato?
Sento spesso il termine "stub", "stub qualcosa", "stub" e così via.
Cosa significa stubing in programmazione e da dove viene la parola? In quali contesti può essere utilizzato?
Risposte:
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.
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
, createToolbar
e createMain
in 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 createToolbar
e createMain
che 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 createMain
e 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.
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.