2011-10-17 15 views
10

Supponiamo di avere una classe Order, che può essere in tre stati diversi: CheckedState, PaidState e OrderedState.Come testare una macchina a stati?

La macchina di stato verrà implementata utilizzando il modello di progettazione stato standard (Gof).

Come si esegue il test dell'unità di solito? Utilizzi un apparecchio per ogni classe di stato (CheckStateFixture, PaidFixture, ...) e l'un l'altro (OrderFixture) per la classe di contesto? Oppure usi solo una fixture per la classe di contesto (Order) in cui inserirai tutti i test unitari?

risposta

5

Preferisco mantenere l'infrastruttura di stato separatamente dall'entità stessa. modo che avrebbe dovuto

  • Entity classe (Ordine)
  • Stato classi di infrastrutture

Per Uniti Infrastructure Io suggerirei di usare singolo apparecchio per entità, così uno OrderStateFixture per l'ordine Uniti Infrastructure sarà sufficiente .

Le prove principali sarebbero le prove che garantiscono l'Ordine stato commuta correttamente:

  • assicurare che lo stato iniziale di un ordine è NotChecked
  • Dopo l'esecuzione successo degli interruttori Order.Paid(amount) metodo Order.State a pagato
  • If Order.Verify() restituisce true/passare senza eccezioni - Order.State diventa Controllato/Verificati
+0

Grazie per la risposta! Vorrei comunque un chiarimento, inseriresti quei test di transizione in OrderFixture o in OrderStateFixture? –

+0

Dipende da chi è incaricato di eseguire una transizione, se Ordine effettua la transizione stessa - questo sarebbe o OrderFixture o OrderStateFixture – sll

+0

Suona bene, grazie! –

Problemi correlati