Informazioni sull'uso delle asserzioni [duplicato]

2

Mi sono imbattuto in un articolo chiamato Programmazione con asserzioni .

E accanto al meccanismo di attivazione e disattivazione delle asserzioni dopo la compilazione, non capisco. Perché le asserzioni sono state introdotte a livello di lingua, il che è un grosso problema, vero?

Non ho mai usato assertions nel codice di produzione, non è mai stato insegnato a utilizzarli nel codice di produzione e non ho mai visto assertions nel codice di produzione. Oltre a questo, preferirei sempre un% più specifico% co_de su un Exception .

Quindi ecco le mie domande. Qualcuno usa AssertionError nel codice di produzione e quali sono i vantaggi di tale utilizzo?

    
posta Angelo.Hannes 06.03.2013 - 10:30
fonte

3 risposte

1

Le asserzioni sono usate per affermare che una condizione è sempre vera. Vengono utilizzati nel codice per garantire che un'ipotesi sia corretta.

Generalmente, se vedi un errore di asserzione, qualcosa di brutto è andato storto.

Puoi leggere tutto su di loro all'indirizzo Wikipedia .

Quando si tratta di usare le proprie asserzioni, non usarle al posto delle eccezioni. Invece, utilizzali ovunque senta la necessità di affermare che una condizione è sempre valida, ad esempio un valore su cui puoi fare affidamento in una struttura dati interna.

    
risposta data 06.03.2013 - 10:37
fonte
0

Beh, tecnicamente parlando, un assert viene normalmente compilato da build di release in modo da non vederli operare in codice in esecuzione in produzione. Detto questo, puoi ancora inserirli nel codice dell'applicazione come una sorta di test di unità in linea in modo che funzionino ancora mentre il codice è in esecuzione in fase di sviluppo / test.

Normalmente i test di unità eseguono bit di codice dell'applicazione e quindi controllano che alcune cose siano vere usando le asserzioni. Detto questo, a volte c'è un motivo per usare un'asserzione all'interno del codice dell'applicazione perché, cosa più importante, un test unitario può fallire da un assert nel codice di test unitario o un assert nel codice dell'applicazione da testare .

Considera che scrivi un test unitario che esegue una sequenza forzata di operazioni sulla tua applicazione che, a tuo avviso, potrebbe teoricamente causare l'accadimento di cose brutte. Potresti non avere un modo semplice, dal test dell'unità dell'oscilloscopio, per sondare le classi dell'applicazione per verificare se qualcosa sta andando storto e potrebbe esserci un'alternativa più semplice nell'aggiungere direttamente l'asserzione nel codice dell'applicazione. A volte scrivo test unitari senza un'asserzione nel test unitario stesso, semplicemente per tentare (e, si spera, fallire) di richiamarne uno che inserisco nell'applicazione.

E una nota finale: le asserzioni non sono le stesse delle eccezioni. Le eccezioni sono utilizzate per comportamenti (rari) ancora attesi e questo può ancora essere testato poiché è possibile scrivere test unitari per prevedere eccezioni. Le asserzioni vengono utilizzate per un comportamento imprevisto impossibile e quindi associate al concetto centrale di test delle unità.

    
risposta data 06.03.2013 - 11:49
fonte
-3

Le asserzioni sono grandiose. L'implementazione delle asserzioni a livello di linguaggio di Java non lo è. Buone asserzioni creano un pop-up che ti permette di saltare - e possibilmente silenziare - l'asserzione, non lanciare un'eccezione e scrivere informazioni utili sul tuo file di log. L'affermazione del livello linguistico di Java non fa nessuna di queste cose e la ignorerei a favore del mio.

    
risposta data 06.03.2013 - 12:52
fonte

Leggi altre domande sui tag