如何对状态机进行单元测试?

时间:2011-10-17 18:17:27

标签: unit-testing design-patterns state

假设我有一个Order类,它可以分为三种不同的状态:CheckedStatePaidStateOrderedState

状态机将使用标准的状态设计模式(Gof)实现。

你通常如何对此进行单元测试?您是否为每个州级(CheckStateFixturePaidFixture,...)和另一个(OrderFixture)使用了一个夹具用于上下文类?或者你只使用一个夹具用于你将放置所有单元测试的上下文类(Order)?

1 个答案:

答案 0 :(得分:5)

我希望将州基础设施与实体本身分开。 所以你会有

  • 实体类(订单)
  • 州基础设施类

对于States Infrastructure,我建议每个实体使用单个fixture,因此Order States Infrastructure的OrderStateFixture就足够了。

主要测试是确保订单状态正确切换的测试:

  • 确保订单的初始状态为NotChecked
  • 成功执行Order.Paid(amount)方法后,Order.State切换到付费
  • 如果Order.Verify()返回true / pass而无例外 - Order.State变为Checked / Verified