Non sono d'accordo con l'articolo sulla natura delle tecniche di prova utilizzate. La soluzione utilizza un gate per verificare se il test deve avere esito positivo o negativo in uno stadio intermedio.
A mio parere, è meglio impiegare Guard Assertions, in particolare per tali test (presupponendo che il test non risulti essere prolisso e complesso, che è un anti-pattern di per sé). Utilizzando guard-asserzioni forze di progettare il SUT in uno dei seguenti modi:
- disegno il metodo stesso di fornire informazioni sufficienti nel risultato se l'invocazione superato o è riuscito. A volte, questo non può essere fatto in quanto l'intenzione del progettista è di non restituire un risultato, e invece di lanciare un'eccezione (che può essere gestita nel secondo caso).
- progettare il SUT in modo che sia state can be verified dopo ogni richiamo del metodo significativo.
Ma prima di considerare le possibilità di cui sopra, date un'occhiata al seguente frammento di nuovo:
plane.bookAllSeats();
plane.bookPlane(createValidItinerary(), null);
Se l'intenzione è quella di testare bookPlane() e verificare per l'esecuzione di tale metodo, è meglio avere bookAllSeats() in un dispositivo. A mio avviso, invocare bookAllSeats() equivale a configurare SUT per garantire che l'invocazione di bookPlane() fallisca, e quindi avere un dispositivo per fare lo stesso farebbe un test più leggibile. Se l'intenzione è diversa, consiglierei di testare lo stato dopo ogni transizione (come normalmente farei nei test funzionali), per aiutare a individuare la causa originale dell'insuccesso.
fonte
2010-09-09 14:25:12
Quando l'ho visto inizialmente, mi sembrava imbarazzante. Ora che ho sperimentato, sembra che dovrebbe funzionare per quello che sto cercando di fare. –
TestNG si vanta di non doverlo fare. – djechlin