2011-10-17 25 views
10

假設我有一個Order類,它可以處於三種不同的狀態:CheckedState,PaidStateOrderedState如何對狀態機進行單元測試?

狀態機將使用標準狀態設計模式(Gof)來實現。

你通常如何測試這個?您是否針對上下文級別爲每個州級(CheckStateFixturePaidFixture,...)和另一個州(OrderFixture)使用了一個燈具?或者你只使用一個燈具作爲上下文課(Order),你將把所有的單元測試?

回答

5

我主張將國家基礎設施與實體本身分開。 所以,你將不得不

  • 實體類(訂單)
  • 國家基礎設施類

對於美國的基礎設施,我建議使用每實體單個燈具,這樣一個OrderStateFixture訂單的國家基礎設施將得到足夠的。

主測試是其確保訂單狀態正確地切換測試:

  • 確保有命令NotChecked的該初始狀態
  • Order.Paid(amount)方法Order.State開關的全成執行到後付費
  • 如果Order.Verify()返回true /單程無一例外 - Order.State變得託運/驗證
+0

謝謝您的回答!我想澄清一下,你會把這些轉換測試放在OrderFixture或OrderStateFixture中? –

+0

這取決於誰負責做一個轉換,如果訂單確實轉換 - 這可能是OrderFixture或OrderStateFixture – sll

+0

聽起來不錯,謝謝! –