Domanda

Una ricerca produce un paio di domande sulla cattura di eccezioni mortali, ma questo è specifico per uso SimpleTest.(So che SimpleTest non è aggiornato, ma ottenere PHP-Unità di lavoro sulla mia configurazione è un'altra questione).

Sto cercando di ottenere il tearDown (), metodo di lavoro, anche quando c'è un errore di eccezione irreversibile, come creare alcuni test righe nel database durante l'installazione, e rimuoverli durante tear-down.Ma quando SimpleTest tratta di un errore di eccezione irreversibile, teardown() non è mai stato eseguito.

C'è un modo per ottenere tearDown() per eseguire nonostante un fatale exeception?

È stato utile?

Soluzione

C'è un "register_shutdown_fuction" gancio che può essere utilizzato:

register_shutdown_function(array($this, 'shutdownHandler'));

In "shutdownHandler" si può scrivere:

error_get_last() && $this->tearDown();

Altri suggerimenti

Quando si verifica un Errore Irreversibile, PHP processo è terminato -- il che significa che non c'è modo di avere la stessa PHP processo eseguito in qualsiasi tipo di addionnal codice, in quanto non c'è più.

Questo significa che :

  • probabilmente non ottenere molto di reporting
  • altre prove, dopo quello che finisce in un Errore Fatale, non verrà eseguito
  • Hai una prova che, in mancanza -- male.


Si dovrebbe risolvere il problema :un Errore Fatale, l'applicazione è male ;è bello che si rilevato con il test automatizzati, ovviamente-ma il passo successivo è quello di farlo andare via ;-)


Come non è possibile eseguire più di codice PHP in un processo che è morto, l'unica soluzione che vedo sarebbe quello di avviare un altro processo, per eseguire la pulizia del codice.

L'idea di base sarebbe :

  • Avviare il test
  • Utilizzare un'altra, totalmente distinti, uno script per eseguire le operazioni di pulizia

Naturalmente, questo significa che la pulizia sarà effettuata solo una volta, dopo che tutti i test sono stati eseguiti ;ma suppongo che è meglio di niente.


Ora, come si fa in modo automatico ?

La soluzione più semplice sarebbe probabilmente utilizzare una shell-script, che gestisce i comandi ;qualcosa di simile a questo, direi che :

#!/bin/sh

php /.../launch-tests.php

php /.../cleanup.php

E di eseguire i test con il lancio di shell-script.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top