Le eccezioni sono solo per la gestione degli errori?

4

Ho uno script che genera eccezioni quando qualcosa va storto. Tuttavia, ai fini del test, desidero anche acquisire punti specifici, anche se non sono sicuro che siano considerati errori o meno.

Di seguito è riportato un esempio:

if ($model->fetchCurrentlyProcessing() > 0) {
    throw new App_Exception_CurrentProcess('There is a currently process running. Stopping process.');
}

if ($model->fetchQueuedItems() == 0) {
    throw new App_Exception_NothingInQueue('Nothing in queue. Stopping process.');
}

Nei miei test voglio prendere in giro la risposta da questi metodi $ model e rilevare quale eccezione è stata lanciata, e se si trattava dell'eccezione prevista o meno. Lasciando eccezioni in questi casi, posso identificare esattamente a che punto la sceneggiatura è stata interrotta. Ma non sono sicuro che questo sia l'uso corretto di Eccezioni in quanto questi non sono errori per la precisione, dato che nulla è andato storto.

    
posta Martyn 08.01.2016 - 06:09
fonte

3 risposte

4

Un'eccezione indica una "situazione eccezionale" a causa della quale un pezzo di codice smette di funzionare. Questo potrebbe essere un errore, ma potrebbe anche essere qualsiasi altra situazione che sia eccezionale e impedisce al codice di svolgere il suo lavoro.

Quindi, entrambi i tuoi esempi mostrano casi eccezionali di eccezioni: il tuo codice dovrebbe svolgere un determinato lavoro e non può farlo, quindi genera un'eccezione.

Si tratta di come definisci una "situazione eccezionale", e per estensione, come descrivi cosa fa il tuo codice. Se chiami il tuo codice "elabora gli elementi in coda", allora non trovare alcun elemento nella coda è una situazione eccezionale. Se chiami il tuo codice "elabora gli elementi in coda, se ce ne sono", quindi non trovare alcun elemento nella coda non è una situazione eccezionale.

    
risposta data 08.01.2016 - 07:04
fonte
2

Anche se sono d'accordo con la maggior parte di ciò che ha detto Mike, direi che la tua strada non è mai il modo giusto di usare le eccezioni. In pratica stai sostituendo qualcosa come "se la coda è vuota, ritorno" con un'eccezione. Cioè, stai usando le eccezioni come un modo per controllare il flusso per implementare il tuo algoritmo di base e questo non va bene. Le eccezioni gestiscono situazioni eccezionali e mentre quelle non sono necessariamente errori, in genere sono e dovrebbero almeno indicare una situazione che rende inutile continuare. Trovare la tua coda è vuota o c'è ancora qualche attività in esecuzione, quindi devi aspettare un po 'più a lungo non è una rovina di piani. E visto che lo farai regolarmente, questo avrà un impatto sulle prestazioni perché le eccezioni non sono economiche, il che non è un problema in caso di interruzione, ma non è un abortimento, è solo un ciclo.

    
risposta data 08.01.2016 - 08:11
fonte
0

Un'eccezione dovrebbe essere generata ogni volta che una funzione non può restituire un valore o un metodo non è in grado di soddisfare la sua post-condizione. Ciò può accadere perché gli input sono fuori portata o a causa di alcune condizioni esterne. Non importa quante volte viene lanciata l'eccezione.

    
risposta data 08.01.2016 - 08:36
fonte

Leggi altre domande sui tag