È considerata 'cattiva pratica' controllare il contenuto del file / la codifica nei test unitari?


84

Un po 'di contesto: oggi ho dovuto aggiornare un po' di codice SQL fornito da un altro mio collega e, dato che è uno script abbastanza grande, è archiviato come file separato (che viene quindi letto ed eseguito in fase di esecuzione). Nel fare ciò ho reintrodotto accidentalmente due bug che avevamo qualche mese fa, vale a dire:

  • Per qualsiasi motivo il file ASCII è stato codificato in UTF-16 (il collega mi ha inviato il file tramite e-mail, il che potrebbe averlo causato).
  • Lo script mancava delle SETdichiarazioni iniziali (richiesto a causa di alcune cose del driver sulla produzione, ma non su un'installazione pulita localmente).

Dopo aver eseguito il debug per circa un'ora (di nuovo), ho deciso di scrivere alcuni test unitari per garantire che ciò non si ripetesse più (e includere un modo rapido per risolverlo nel messaggio di asserzione per fornire una soluzione semplice per i futuri sviluppatori).

Tuttavia, quando ho inserito questo codice, un altro collega (che è anche il capo del nostro team) mi viene incontro e mi ha detto che non avrei dovuto ripetere queste cose perché:

"Queste cose non appartengono ai test unitari"

"I test unitari devono essere utilizzati solo per controllare il flusso del codice"

Sono piuttosto in conflitto ora poiché penso ancora che ciò che sto facendo non sia sbagliato, poiché questo bug non verrà reintrodotto in futuro, tuttavia questo collega lavora come senior e alla fine della giornata decide cosa ci dedichiamo. Cosa dovrei fare? Sbaglio a farlo in questo modo? È considerata una cattiva pratica?



35
" I test unitari dovrebbero essere usati solo per controllare il flusso del tuo codice " Direi che sono cazzate. Tradizionalmente dovrebbero includere tutti i test necessari per garantire che l '"unità" considerata isolatamente sia corretta. Se scrivi solo quei test unitari che sono utili per "controllare il flusso", qualunque cosa significhi, spero che tu abbia anche suite di test approfondite separate (scritte dal dipartimento QA?).
martedì

8
Il problema del tuo collega comunque è probabilmente proprio dove hai messo quei test. Mi concentrerei su questo, lasciando da parte le discussioni sulle denominazioni / guerre sante. È possibile che quei test siano troppo lenti per la suite a cui li hai aggiunti, ma è anche del tutto possibile che il tuo collega sia semplicemente fissato sulla sua idea di test unitari e stia risolvendo un problema inesistente; quindi è meglio prima chiarire qual è il vero problema.
martedì

2
A proposito, quei test sembrano qualcosa che vorresti eseguire ogni volta che modifichi quel file SQL. Qui il problema principale potrebbe essere rappresentato dagli strumenti di test, che potrebbero non supportare una modalità operativa "esegui solo se modificata"; se ciò causa problemi reali e concreti, potrebbe essere utile includere manualmente la funzionalità "solo se modificata" con un po 'di difficoltà solo per quei test specifici.
martedì

5
Invece di testare che il file abbia i contenuti corretti e codifica il motivo per cui non prova che funziona ?
user253751

Risposte:


156

Molto probabilmente i test che hai scritto sono più vicini ai test di integrazione o regressione rispetto ai test unitari. Mentre la linea può essere molto sfocata e talvolta si trasforma in pedanteria su ciò che è o non è un test unitario, vorrei tornare dal tuo collega e chiedere dove dovrebbero essere i test che hai scritto poiché aggiungono valore garantendo la correttezza del codice.

Non mi concentrerei molto su ciò che è o non è un unit test e mi rendo conto che anche se si tratta di un test di integrazione, nel test potrebbe esserci ancora valore.


I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
Thomas Owens

36

Tecnicamente, non è un test unitario, e più di una fase di validazione. L'approccio corretto dipende davvero da ciò che deve essere il flusso di lavoro. Il vantaggio del team è corretto su quale sia lo scopo dei test unitari. La mia sensazione è che questo sia un caso di utilizzo dello strumento sbagliato per un lavoro che deve ancora essere svolto. Quindi inizia con questo:

Qual è il problema che sto cercando di risolvere?

Secondo la descrizione, è necessario convalidare che gli script del database siano conformi ad alcuni standard.

Quali strumenti / processi sono disponibili per risolvere il problema?

La qualità del codice sorgente viene generalmente controllata da strumenti di analisi statica . Se non si dispone di uno strumento di analisi statica per convalidare il proprio SQL, è possibile creare uno strumento rapido e sporco che esegua il controllo su qualsiasi file SQL passato ad esso. Non fa male controllare se ci sono strumenti di analisi statica in grado di gestire i problemi di cui stai parlando.

Se fai quella parte della tua infrastruttura di build, come incorporarla in Jenkins o qualcosa del genere, può essere applicata a tutti i file SQL nel tuo progetto.

I test unitari risolvono solo il problema per il file corrente.

Come comunico la necessità dello strumento?

È abbastanza facile, parli con il capo della tua squadra. Può collaborare con il proprietario del prodotto e voi per determinare il rischio / rendimento dell'investimento negli strumenti. Se questo è probabilmente un problema una tantum, probabilmente gli utensili sarebbero eccessivi. Se gli strumenti per individuare i problemi più grandi sono facili, può valerne la pena solo per il controllo della sanità mentale.

Il capo della tua squadra potrebbe avere alcune idee che tu (o io) non hai preso in considerazione, in grado di affrontare il problema in modo più corretto.


21
Quando si discute di costi e rischi, sarebbe importante notare che ha già causato tempo perso a causa della reintroduzione di bug precedentemente risolti. Questo da solo è un argomento forte per automatizzare la verifica. +1
jpmc26

1
@ jpmc26, sono completamente d'accordo. La discussione dovrebbe iniziare con il fatto che hai perso per molte ore a capire cosa non andava e i tuoi test unitari sono stati il ​​tuo primo tentativo di impedire al resto della squadra di perdere lo stesso tempo. Tuttavia, lavorare con il responsabile del team che deve rispondere alla direzione e alle parti interessate è generalmente molto apprezzato. Come team leader, voglio essere in grado di difendere gli strumenti / le pratiche / il codice che gestiamo. Se vedessi dei test unitari che non potevano essere ricondotti ai requisiti effettivi, sarei preoccupato.
Berin Loritsch,

1
@BerinLoritsch Tecnicamente, non è un test unitario che vorrei davvero sapere su quale "tecnica" si basa questa affermazione. Per quanto ne so, non esiste un'unica definizione autorevole di unit test e ognuno ha avuto la propria idea di cosa " siano ".
martedì

2
@gbr Esiste un accordo informale tra gli sviluppatori secondo cui i test unitari sono test eseguiti separatamente da sistemi esterni. Testano solo il codice stesso, non le interazioni con file, database o altri servizi esterni. Wikipedia documenta questa comprensione: en.wikipedia.org/wiki/Unit_testing#External_work .
jpmc26,

1
@BerinLoritsch È anche possibile che tutti noi interpretiamo la domanda in un modo diverso, comunque non era molto dettagliato e l'autore non è ancora tornato a nessuno. Non sono molto interessato a discutere ulteriormente sulla classificazione di questi test, l'importante è se dovrebbero esistere (sono abbastanza sicuro che dovrebbero) e quanto spesso farli funzionare (ad ogni cambio dell'IDE, ad ogni commit locale, ad ogni spinta verso il repository centrale, ad ogni tot ...).
martedì

19

È buona norma chiamare test che accedono ai file "Test unitari".

Lui: "Queste cose non appartengono ai test unitari"

Tu: "Ha senso, ma non sono riuscito a trovare un posto migliore dove metterli. A che cosa appartengono?"

Sfortunatamente, quali tipi di test esistono e come sono organizzati è interamente specifico dell'azienda. Quindi dovrai scoprire come la tua azienda gestisce questi test.

Se non hai ancora un modo per eseguire test automatici diversi dai Test unitari, l'approccio pragmatico consiste nel contrassegnare i Test unitari che non sono effettivamente Test unitari con un prefisso, finché non ne hai abbastanza per iniziare a capire che tipo di test che hai effettivamente / bisogno. Dopodiché puoi iniziare a organizzare.


2
È una cattiva pratica chiamare test che accedono ai file "Test unità". Qui il file a cui si accede è il file di origine . Si accederà tanto quanto qualsiasi file sorgente (per analizzarlo). Il fatto che probabilmente il test non verrà eseguito nella stessa lingua dell '"unità" che viene controllata (SQL) lo rende poco ortodosso ma non dovrebbe influenzare la sua classificazione come test unitario. continua ...
GBR

1
... In realtà, la codifica corretta di un file è un "test" che viene eseguito da qualsiasi compilatore ogni volta che legge un file sorgente. Qui il problema è che essendo un file esterno interpretato in fase di esecuzione i "test del compilatore" non verranno eseguiti automaticamente, quindi è del tutto appropriato aggiungerli esplicitamente, e penso che possa essere giustamente considerato un "test unitario" di quello Frammento SQL. E sembra ragionevole includerlo nella (potenziale) serie di test eseguiti ad ogni modifica del file.
martedì

3
A proposito, ciò che è generalmente consigliato è di accedere a file esterni quando ciò può essere sostituito con un finto o qualcosa del genere. E per la maggior parte delle definizioni i test unitari possono accedere a file esterni o altro, è fortemente sconsigliato, poiché può rallentare molto le cose. Un negozio è libero di prescrivere che non è possibile aggiungere test che accedono ai file alla suite di test che viene eseguita più frequentemente, ma che non rende tali test indegni della designazione "unit test", li rendono semplicemente "non da inserire nella suite di test più frequentemente eseguita di questo progetto ".
martedì

2
@Warbo Si tratta di una cattiva pratica per accedere ai file (in generale), e il (più importante) ragione è che non sono lenti se comportano "GB leggono su un traballante collegamento NFS", sono lenti, se, ad esempio, citando Michael Feathers , prendono 1/10 di secondo. Questo perché vuoi eseguire i test il più frequentemente possibile, idealmente ad ogni cambiamento che fai nell'IDE, e quando ne hai molti (come dovresti) anche i decimi di secondo si accumulano in ore. (continua ...)
GBR

1
@Warbo .. Detto questo, ciò che conta è il tempo totale impiegato, quindi se hai un progetto molto piccolo che sei sicuro rimarrà piccolo, puoi essere molto più indulgente sulla velocità dei singoli test. E se davvero non ti interessa eseguirli frequentemente, sei completamente libero persino di farli chiamare un dipendente OPMROC per prendere e inviare via fax un file da un cabinet. Puoi anche scegliere di essere più rilassato mentre hai ancora pochi test e tornare indietro per accelerarli quando iniziano a prendere troppo, ma devi tenere conto che questo è un debito che stai accumulando.
martedì

14

Lo dice Michael Feathers nel suo libro Lavorare efficacemente con il codice legacy:

Nel settore, le persone spesso vanno avanti e indietro se determinati test sono test unitari. [...] Torno alle due qualità: il test è veloce? Può aiutarci a localizzare rapidamente gli errori?

Il tuo test ti aiuterà a localizzare rapidamente gli errori e ad eseguirli velocemente? Se sì, allora fallo! Se no, allora non farlo! E 'così semplice!

Detto questo, stai lavorando in un ambiente con altre persone e devi andare d'accordo con loro. Potresti finire per farlo a modo suo, anche se in privato non sei d'accordo.


È una buona regola empirica, ma avrebbe risparmiato confusione se avesse scritto " se aggiungere test particolari alla suite di test più frequentemente eseguita ", piuttosto che fare confusione con il termine "unit test".
martedì

1
@gbr Se i risultati del test sono accurati, l'unica altra cosa importante è la velocità con cui viene eseguito. Se ho 100 test eseguiti ciascuno in meno di 0,1 secondi, in totale verranno eseguiti in meno di 10 secondi. Sono felice di gestirli frequentemente. Se ho 1000 test, impiegheranno fino a 1m40s. È troppo lungo, non li eseguirò frequentemente, ma li eseguirò una volta apportate le modifiche con il gruppo più piccolo di 100 test. Non mi interessa se è tecnicamente un test di accettazione o qualcos'altro. Se se mi aiuta a trovare prima gli errori, lo farò indipendentemente dalla semantica. Un test fornisce valore solo quando viene eseguito.
CJ Dennis,

Sono per lo più d'accordo (l'indipendenza è un'altra cosa molto importante, ad esempio), ma sarebbe comunque meglio se Michael Feathers non avesse aggravato la confusione su cosa significhi "test unitario". Non che sia particolarmente responsabile di quella confusione (e il suo libro è eccellente, nelle parti che ho scremato finora). In ogni caso stavo sollevando un punto piuttosto secondario.
dal

@gbr Non sta ridefinendo i test unitari, sta dicendo che non dovrebbe essere il tuo criterio di inclusione. Il tuo criterio dovrebbe essere l'utilità, ed è quello che sta definendo.
CJ Dennis,

Rileggo quella sezione; Non sono sicuro, per me non è chiaro se ciò significhi essere una (sorta di) definizione o solo un criterio. Ma in realtà " Può aiutarci a localizzare rapidamente gli errori " potrebbe implicare molto bene le cose che dice prima, sull'isolamento ecc. Quindi potrei aver fatto un rumore per nulla (anche se la risposta da solo potrebbe ancora essere male interpretato)
GBR

10

Ho scritto test simili, a volte, su file di codice sorgente, file di configurazione e così via. Non li chiamerei test di unità perché (a) stanno accedendo al file system e potrebbero non essere ultra-veloci (b) Non mi interessa se vengono eseguiti ad ogni check-in (al contrario di ogni notte in un Server CI).

Potresti chiamarli test di integrazione; certamente, sono più vicini a quella prospettiva rispetto ai test unitari.

Il mio termine per loro è test delle risorse . IMHO, sono del tutto giustificati se eseguiti di notte su un server CI: hanno un costo minimo e, se usati con giudizio, aggiungono chiaramente valore. Una definizione di giudizio : se il test sta verificando un problema che ha causato un problema (come la codifica che menzioni).


4

Un test unitario consiste nel testare un metodo o "unità" di codice. Stai testando il più piccolo gruppo di logica e codice nel tuo software.

Successivamente, quando ti unirai a quello con altre unità, eseguirai test di integrazione.

Spero che il capo della tua squadra abbia incoraggiato la tua iniziativa e avrebbe dovuto offrire suggerimenti alternativi. Hai sicuramente l'idea giusta.

Il tuo SQL è un codice proprio come qualsiasi linguaggio di generazione inferiore come C # o Java e dovrebbe essere testato come tale. E la verifica e la validazione appartengono a tutti i livelli di test. Quindi le istruzioni di codifica e SET sono incluse, ma non necessariamente testate esclusivamente. Cose generali come le terminazioni di linea o la chiusura di solito puoi semplicemente usare un hook o una funzione SCM.

La migliore pratica consiste nell'eseguire test di regressione per garantire che i bug passati non vengano reintrodotti. Generalmente, i test vengono creati insieme a qualsiasi risoluzione del bug. Se questi bug non sono coperti dai test di regressione a livello di unità / integrazione o di sistema e quindi reintrodotti, si tratta di un problema di squadra, un problema di processo, non individuale.

Il fatto è che gli errori di sintassi, le istruzioni mancanti o i blocchi logici all'interno di una 'unità' non vengono generalmente testati. Stai testando gli ingressi e le uscite dell'unità in diverse combinazioni, testando le molte possibilità che potrebbero essere generate.

Tornando alle dichiarazioni SET mancanti - aiutano a informare le molte possibilità di input e output per cui testare. Quale test scriveresti che NON FAREbbe se ti mancasse un SET scelto?


Il test "Unit of code" è un approccio al test unitario. Nella mia esperienza, ciò porta a fragili test e massicci gonfiori (ad es. Derisione eccessiva). Un'alternativa, e meglio IMHO, approccio al test unitario è "unità di funzionalità". Non importa se alcune funzionalità (ad esempio, "impostare un cookie quando si effettua l'accesso") richiedono un metodo o una dozzina di processi intercomunicanti, è comunque un'unità.
Warbo

@ Warbo: lo definirei più vicino (ma non) ai test di integrazione. I test unitari non richiedono nulla di eccessivo o massiccio. I test unitari dovrebbero essere piccoli e veloci. Effettivamente il test per funzionalità porta a ciò che descrivi. I test fragili sono quelli che sono 1. più grandi o fanno più di quanto dovrebbero. 2. altamente accoppiato 3. non hanno una sola responsabilità.
Ross,

3

Se hai file che diventano parte del tuo prodotto, il loro contenuto deve essere corretto. Nessun motivo per non verificarlo. Ad esempio, se hai bisogno di sei immagini 1024x 1024 in alcune cartelle, allora scrivi un test unitario che verifica che tu abbia esattamente quello.

Ma probabilmente non hai solo i file, hai anche del codice che legge i file. È possibile scrivere un test unitario per quel codice. Nell'esempio sopra, la funzione di leggere una delle sei immagini restituisce un'immagine 1024 x 1024 in memoria (o qualunque cosa avrebbe dovuto produrre).

Ad ogni modo, potrebbe non essere un test unitario, ma è un test utile. E se si utilizza un framework di unit test che consente di eseguire un test utile (che non è un unit test), perché non utilizzare il framework di unit test?


2

Forse sto fraintendendo il tuo problema, ma per me questo suona come un problema che non dovrebbe essere catturato da alcun tipo di test dedicato ma semplicemente dal sistema di controllo della versione . Qualsiasi modifica a una base di codice deve essere rivista patch per patch prima di impegnarsi. Un modo semplice per farlo in git è aggiungere le modifiche con

git add -p

Questo per ogni cambiamento in un file di testo la directory di lavoro ti chiederà se vuoi davvero mantenerlo. Ciò consentirebbe di vedere, ad esempio, la cancellazione di tali " SETdichiarazioni iniziali ".

Nel caso in cui la codifica di un intero file fosse cambiata, sarebbe accaduto qualcosa di diverso: l'algoritmo non avrebbe diffuso il vecchio e il nuovo file e quindi git add -pnon avrebbe aggiunto nulla. Ciò sarebbe quindi visibile nell'altro comando che farei prima di qualsiasi commit, vale a dire

git status

Qui vedresti il ​​file evidenziato in rosso, a indicare che ci sono cambiamenti. Indagare sul perché questi non ce l'hanno fatta git add -prenderebbe rapidamente evidente il problema.


per favore, dimmi, come può aiutare qualsiasi futuro sviluppatore a evitare esattamente lo stesso problema? ... la cosa sui test automatizzati (valida anche per le asserzioni e la progettazione per contratto) è che sono, beh, erm, automatizzati .
vaxquis,

@vaxquis impedisce lo stesso identico problema, anche se per coincidenza, come effetto collaterale di un flusso di lavoro che è una buona idea per diversi motivi. Il mio punto è che questo problema potrebbe verificarsi in tutti i casi in cui il team del PO non ha fatto un ottimo uso del proprio VCS. - Nulla contro i test automatizzati, ma il loro valore sta testando le proprietà semantiche che potrebbero rompersi da cambiamenti innocui nella logica del programma. Non è per controllare ogni possibile stupido modo in cui il codice sorgente potrebbe cambiare.
lasciato il

secondo la tua logica, non abbiamo bisogno delle cinture di sicurezza; dobbiamo solo guidare con più attenzione e causare meno incidenti ... Hai perso il punto principale OP sollevato - quello di un errore umano . Nessuna quantità di VCS può proteggerti da questo . Inoltre, FWIW: se un test può essere automatizzato, dovrebbe essere automatizzato. Gli esseri umani sono sempre i collegamenti più deboli nei processi di ingegneria. gitne è il miglior esempio: un ottimo strumento, ma a malapena inutilizzabile per i semplici mortali .
vaxquis,

@vaxquis No, no! Le cinture di sicurezza sono analoghe al tipo di test che ha senso: rilevano una vasta gamma di situazioni che potrebbero verificarsi per caso. Un test sulla codifica dei file sarebbe analogo a un robot che ti segue in giro e ti impedisce di asfissiarti riempiendo i fagioli sul naso.
lasciato il

Secondo il PO, i file nel formato sbagliato sono successe due volte già, quindi a quanto pare sono probabile che si verifichi per caso.
gnasher729,

1

Un altro aspetto da considerare: poiché queste due condizioni sono requisiti per l'esecuzione del programma, non dovresti incorporare la logica vicino alla logica di esecuzione? Voglio dire: testare l'esistenza di un file prima di leggerlo e / o convalidarne il contenuto, giusto? quindi come è diverso? Penso che poiché si tratta di una risorsa esterna al codice, dovrebbe essere convalidata in fase di esecuzione, prima di essere effettivamente utilizzata. Risultato: app più potente, non è necessario scrivere test aggiuntivi.


1
In che modo il fallimento solo in fase di esecuzione la rende un'app più potente? Certo, può essere appropriato avere anche controlli di runtime vicini alla fonte del problema, ma se riesci a rilevare errori prima che possano causare problemi di runtime, è molto meglio, non credi? Sei sicuro di avere familiarità con i test automatici?
martedì

1
"In che modo il fallimento solo in fase di esecuzione rende un'app più potente?" Genera un'eccezione se il controllo fallisce. Nel test, è sufficiente verificare che la sezione del codice da testare restituisca il risultato previsto: questo rimuove l'onere per verificare un motivo in più per l'errore.
Dott. Gianluigi Zane Zanettini,

1
La tua strategia non ha (quasi) nulla a che fare con i test unitari e i test automatizzati in generale, è una cosa diversa, con usi diversi.
dal

1
Stavo per suggerire questo. Il bug è un dettaglio di implementazione; Immagino che le risposte sarebbero molto diverse se la codifica non corretta fosse in un campo privato piuttosto che in un file autonomo! Sembra che OP abbia 2 problemi: i file di risorse potrebbero essere codificati male e la produzione si comporta diversamente dagli sviluppatori. Controllando il file in fase di esecuzione, poco prima che venga utilizzato, risolviamo il secondo problema: dev e prod genereranno lo stesso errore. I test unitari possono quindi concentrarsi sulla funzionalità effettiva anziché sui dettagli di implementazione; questi controlli "interni" saranno esercitati proprio come i metodi privati.
Warbo

1
@ Dr.GianluigiZaneZanettini Bah ... Mi arrendo ... Per come la vedo, nella migliore delle ipotesi la tua risposta, dopo i tuoi "chiarimenti" nei commenti, era fuori tema (non una risposta alla domanda), ma in realtà, così com'è, è semplicemente sbagliato! non c'è bisogno di scrivere test aggiuntivi ??? Non ho abbastanza reputazione per sottovalutarlo, ma considera come se lo avessi fatto. E non credo ci sia molto valore nel continuare questa conversazione.
martedì

1

I test hanno lo stesso codice di tutti gli altri e, se abbastanza complessi, beneficiano anche di ... test unitari. Sembra più semplice aggiungere tali controlli preliminari direttamente nel test.

La maggior parte dei test sono abbastanza semplici da non richiedere questo, ma se alcuni sono sufficientemente complessi, non vedo nulla di fondamentalmente sbagliato in questi controlli preliminari. Naturalmente, anche il test dovrebbe fallire senza di loro, ma un buon test unitario indica anche quale unità sta fallendo.

Uno script che viene utilizzato come parte del test e deve avere determinati contenuti e codifica è probabilmente un'unità. Potrebbe avere molto più codice e logica rispetto al resto del test. Un test con tale script non è il miglior progetto di sempre e, se possibile, dovrebbe essere trasformato in qualcosa di più diretto (a meno che questo non sia un test di integrazione).


1
l'autore non dice da nessuna parte che lo script SQL è una parte di qualche prova, ti sembra di aver letto male la questione
GBR

È difficile da capire, presumo che lo script SQL sia parte del test.
h22,

il tuo commento "Ci è difficile da capire" ...
gbr

Difficile da capire. Downvoting della domanda.
h22,

1

In primo luogo, uno degli scopi dei test è impedire che i problemi si ripetano nel codice, quindi è assolutamente necessario continuare a scrivere test di questo tipo.

In secondo luogo, la denominazione è difficile. Sì, questi chiaramente non sono "test unitari", ma possono essere parti desiderabili e necessarie del processo di compilazione, perché ti proteggono da errori evidenti e perché ti danno un feedback sugli errori prima (specialmente dato che non vedi il conseguenze su una casella di sviluppo).

Quindi, la domanda è davvero (dovrebbe essere nel tuo contesto) di più su quando e come vengono eseguiti questi test piuttosto che cosa sono.

Ho usato questo tipo di test ampiamente in passato - ci hanno risparmiato un bel po 'di dolore.


E se qualcuno si preoccupasse di spiegare il voto negativo, lo apprezzerei
Murph,

1

I test unitari riguardano l'esecuzione di un'unità di codice in isolamento per confermare che sta producendo il risultato corretto per l'input corretto. L'isolamento dovrebbe rendere ripetibili sia l'unità sottoposta a test che la prova stessa, ovvero non dovrebbe dipendere o introdurre effetti collaterali.

SQL non è esattamente qualcosa che può essere testato in modo isolato, quindi qualsiasi test di SQL non è esattamente un test unitario e, ad eccezione delle istruzioni SELECT, è quasi certo che abbia un effetto collaterale. Possiamo chiamarlo un test di integrazione piuttosto che un test unitario.

È sempre saggio assicurarsi che qualsiasi difetto che potrebbe essere introdotto possa essere rilevato il più presto possibile nel ciclo di sviluppo e sia utile farlo in modo da facilitare l'identificazione della fonte del difetto in modo che possa essere rapidamente corretto.

I test in questione possono essere ricollocati in modo più appropriato dal corpo dei "test unitari" e collocati altrove, ma non devono essere rimossi del tutto se stanno facendo qualcosa di utile come la protezione contro l'eventuale introduzione di un difetto che potrebbe richiedere ore per tracciare giù.

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.