Debug.Assert è obsoleto se si scrivono i test di unità?

1

Proprio come la domanda chiede, c'è bisogno di aggiungere Debug.Assert nel tuo codice se stai scrivendo unit test (che ha le sue asserzioni)? Ho potuto vedere che questo potrebbe rendere il codice più ovvio senza dover entrare nei test, tuttavia sembra che potresti finire con affermazioni duplicate. Mi sembra che Debug.Assert sia stato utile prima che i test unitari diventassero più diffusi, ma ora non è necessario. Oppure, non sto pensando a qualche caso d'uso?

    
posta Justin Pihony 15.04.2012 - 16:08
fonte

3 risposte

8

Le asserzioni rendono esplicite le ipotesi. I test unitari ben scritti fanno lo stesso, ma in un posto completamente diverso.

Pertanto, le asserzioni, intervallate nella logica, aiutano document il codice e lo rendono più comprensibile. Questo è il modo in cui uso le asserzioni. Questo è utile in particolare quando si implementano algoritmi da descrizioni teoriche, che di solito offrono le asserzioni come parte di una prova di correttezza.

In un certo senso, i test unitari e le asserzioni sono due facce della stessa medaglia: i test unitari cercano di garantire la correttezza attraverso un processo, mentre le asserzioni cercano di garantirlo con la prova.

Inoltre, le asserzioni possono aiutare a eseguire il debug di tali algoritmi perché offrono la risoluzione delle subunità, se lo si desidera. I test unitari invece sono intrinsecamente vincolati a una risoluzione più grossolana. Non possono dirti nulla sullo stato interno di un algoritmo. Avere piccole unità aiuta ma non è sempre possibile.

    
risposta data 15.04.2012 - 16:30
fonte
6

I test unitari assicurano la correttezza per ingressi specifici (gli ingressi test).

Le asserzioni del contratto (o le asserzioni di debug) asseriscono la correttezza per ogni dato input.

Se vuoi che il tuo codice sia più sicuro, la combinazione tra i due produrrà risultati migliori.

    
risposta data 15.04.2012 - 16:36
fonte
2

Come altri hanno già menzionato, una combinazione di asserzioni e test unitari documenterà meglio il tuo codice e ti aiuterà a garantire la correttezza, ma sono usati per diversi motivi: asserzioni verificano lo stato interno di un codebase mentre test unitari verificano il comportamento esterno di un codebase.

Ricorda inoltre che asserzioni e test unitari possono essere eseguiti separatamente e insieme. Ecco alcuni scenari:

  • Costruire il codice nell'IDE e eseguirlo in configurazione Debug eseguirà solo asserzioni.
  • L'esecuzione dei test di unità in Debug eseguirà anche asserzioni.
  • L'esecuzione dei test di unità in Release configuration non eseguirà asserzioni.

Pertanto, è utile avere asserzioni sparse nella base di codice che verranno eseguite in configurazione Debug e test unitari che possono essere eseguiti separatamente in configurazione Debug o Release .

    
risposta data 15.04.2012 - 16:58
fonte

Leggi altre domande sui tag