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

Ria*_*ana 12 state unit-testing design-patterns

假设我有一个Order类,它可以在三种不同的状态:CheckedState,PaidStateOrderedState.

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

你通常如何对此进行单元测试?你使用的每个状态类(夹具CheckStateFixture,PaidFixture...)和彼此(OrderFixture)的上下文类?或者您只使用一个夹具用于上下文类(Order),您将在其中放置所有单元测试?

sll*_*sll 5

我不愿将州基础设施与实体本身分开.所以你会的

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

对于国家基础设施,我建议每个实体使用单个固定装置,因此OrderStateFixture订购国家基础设施就足够了.

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

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