12

假设我有一个Order班级,它可以处于三种不同的状态CheckedStatePaidStateOrderedState

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

您通常如何对此进行单元测试?您是否为每个状态类(CheckStateFixture, , ...)使用一个夹具,并为上下文类使用PaidFixture另一个( )?OrderFixture或者您是否只使用一个用于Order放置所有单元测试的上下文类 ( ) 夹具?

4

1 回答 1

5

我更愿意将国家基础设施与实体本身分开。所以你会有

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

对于States Infrastructure,我建议每个实体使用一个fixture,因此OrderStateFixtureOrder States Infrastructure 一个就足够了。

主要测试将是确保 Order 状态正确切换的测试:

  • 确保订单的初始状态为 NotChecked
  • 成功执行Order.Paid(amount)Order.State 方法后切换到已付款
  • 如果Order.Verify()返回 true/无异常通过 - Order.State 变为 Checked/Verified
于 2011-10-17T18:24:38.327 回答