Ho una buona conoscenza dei test unitari. Ho cercato di leggere sui contratti di codice. Aiuta davvero i test unitari? È sovrastimato soprattutto quando parliamo di contratti in codice che aiutano a fare test unitari. Mi riferisco in particolare ai contratti in .net 4.0. Uso nunit per il test delle unità.I contratti di codice aiutano davvero i test delle unità?
risposta
Sì e No. I test unitari sono fondamentalmente un contratto che dice, MyMethod() prende X e si aspetta che Y sia un risultato, e quando non lo fa, i test unitari falliscono e tu sei avvisato come lo sviluppatore di MyMethod() che hai rotto qualcosa al suo interno I contratti di codice aiutano a scrivere test di unità, poiché i requisiti dei contratti facilitano la conoscenza dei requisiti dei test unitari quando vengono scritti. Tuttavia, il vero motivo per i contratti di codice non è per te, ma per gli altri sviluppatori che utilizzano l'API che crei. I test unitari consentono di conoscere input e output corretti, ma quando si rilascia il codice in modalità wild, i test unitari non vengono rilasciati con il dll. I contratti di codice danno agli sviluppatori altri il vantaggio di conoscere, attraverso contratti di compilazione e controllo, gli stessi requisiti. I contratti proteggono da quegli sviluppatori (io) che hanno una tendenza orribile a non leggere la documentazione del metodo e iniziano a trasmettere le cose, quindi ora saranno avvertiti attivamente attraverso i contratti.
No, non penso che i contratti di codice ti aiutino a scrivere test di unità. I test unitari definiscono il comportamento e i vincoli di una determinata azione. Una di quelle specifiche scritte nei test unitari potrebbe essere che gli argomenti di un metodo non possono essere nulli.
In tal caso, è comunque necessario scrivere il test dell'unità. Il contratto di codice è un modo per implementare le specifiche, ma non l'unico modo.
In altre parole, non dare per scontato che l'utilizzo di un contratto di codice significhi che non è necessario scrivere un test di unità! Se qualcuno cambia il contratto del codice o lo rimuove, non avrai un test che ti dice che le specifiche previste non sono riuscite.
Non credo che nessuno stesse dicendo che i contratti di codice dovrebbero sostituire i test unitari. –
Sono d'accordo che i contratti non aiutano a scrivere i test unitari. Idealmente, i test dovrebbero venire prima, quindi non dovrebbero esistere contratti fino a quando non ci sarà un test fallimentare. I contratti possono quindi essere scritti per far rispettare eventuali test negativi ("dovrebbe lanciare"). –
I contratti di codice possono essere utilizzati per le cose che non è possibile utilizzare unit test (contratti per interfacce). Sono applicati nelle catene di ereditarietà (dove puoi facilmente commettere errori con il test manuale dell'unità). Forniscono la documentazione automaticamente (cosa che i test unitari non possono fare). Possono fornire controlli di runtime in produzione (cosa che i test di unità non possono fare).
D'altra parte, i contratti falliscono solo quando vengono esercitati, e quindi senza test unitari non si ha alcuna garanzia della qualità del codice (cioè che tutto il codice riempie i vari contratti). I due concetti sono gratuiti.
- 1. SpecFlow/BDD per i test delle unità?
- 2. Global.asax per i test delle unità?
- 3. automake: esegue automaticamente i test delle unità
- 4. Codice unità client di test delle unità di gestione
- 5. iPhone - Recupero delle risorse per i test delle unità logiche
- 6. Utilizzo delle informazioni sulle applicazioni con i test delle unità?
- 7. File di dati esterni per i test delle unità
- 8. Come velocizzare i test delle unità di Spark SQL?
- 9. Disabilita i generatori di test delle unità in Rails
- 10. Utilizzo di StructureMap con i test delle unità
- 11. Server HTTP per i test delle unità in Delphi
- 12. Manipolazione del file app.config per i test delle unità
- 13. Test unità Laravel - Esegui tutti i test
- 14. Impossibile eseguire i test delle unità WP81 con VSTest.Console.exe
- 15. Come eseguire i test delle unità qtestlib da QtCreator
- 16. Best practice per i test delle unità Android?
- 17. Disabilitare temporaneamente i singoli test delle unità Python
- 18. Disabilita il timeout per i test delle unità in C#
- 19. Test delle unità in PHP?
- 20. Unità test stile codice javascript
- 21. Che cos'è un ramo nella copertura del codice per i test delle unità javascript
- 22. Questa tipica esperienza di test delle unità?
- 23. VS2013 con ReSharper 8.2 non riconosce i contratti di codice?
- 24. Da dove iniziare con i contratti di codice?
- 25. I membri statici aiutano l'efficienza della memoria?
- 26. Come lavorare con i contratti di scrapy?
- 27. Come abbinare testo contro i modelli in unità di test
- 28. Utilizzo degli scenari Specflow per entrambi i test di integrazione e test delle unità
- 29. @ExpectedException nei test delle unità di graal
- 30. Test delle unità Android delle categorie
Ma non duplicherò la mia logica? Voglio dire, avremo la stessa logica (pre e post condizioni) per i contratti e le prove di unità. –
Lo farà, e da un punto di vista purista, dovrebbe, dal momento che se qualcuno rimuoverà accidentalmente il contratto, i test unitari continuerebbero a verificare la logica che non si vuole che faccia qualcosa che potrebbe fare ora, o viceversa. I contratti possono essere una guida per scrivere i test unitari, ma non sono ancora un sostituto per loro. –
Trovo difficile concordare che i contratti duplicano i test unitari. I contratti di codice stabiliscono i requisiti, i test unitari verificano che siano veri. In un certo senso, i test stanno verificando che i tuoi contatti siano corretti - i contratti sono codice consegnabile e quindi dovrebbero essere testati. –