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

标签 unit-testing design-patterns state-pattern

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

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

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

最佳答案

我更喜欢将状态基础设施与实体本身分开。
所以你会有

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

  • 对于州基础设施,我建议每个实体使用一个固定装置,所以一个 OrderStateFixture对于订单状态基础设施就足够了。

    主要测试将是确保订单状态正确切换的测试:
  • 确保订单的初始状态为 NotChecked
  • Order.Paid(amount)成功执行后方法 Order.State 切换到付费
  • Order.Verify()无一异常(exception)地返回 true/pass - Order.State 变为 Checked/Verified
  • 关于unit-testing - 如何对状态机进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7797816/

    相关文章:

    java - 工厂设计模式中类的创建

    c++ - 在游戏中使用状态模式

    unit-testing - 如何打破依赖关系以启用单元测试

    python - 单元测试是否可以断言方法调用 sys.exit()?

    unit-testing - 使用 Moq 返回模拟列表的模拟对象

    java - 代码设计模式结构

    Angular Testing - 无法在订阅内运行断言

    java - Java 中正确的 MVC 实现

    java - 用状态/策略模式替换 if/else 逻辑

    java - 处理状态转换的模式