如何对顺序逻辑进行单元测试?

zvo*_*kov 7 language-agnostic unit-testing

假设我有具有以下方法的 Car 类:

  • 装载汽油(I燃油气)
  • InsertKey(IKey键)
  • 启动引擎()
  • IDriverSession Go()

Car 的目的是配置并返回 IDriverSession,应用程序的其余部分使用该 IDrivingSession 来驾驶汽车。如何对我的汽车进行单元测试?

看起来需要完成一系列操作才能调用 Go() 方法。但我想单独测试每种方法,因为它们都有一些重要的逻辑。我不想进行一堆像这样的单元测试

Test1: LoadGasoline, Assert

Test2: LoadGasoline, InsertKey, Assert

Test3: LoadGasoline, InsertKey, StartEngine, Assert

Test4: LoadGasoline, InsertKey, StartEngine, Go, Assert
Run Code Online (Sandbox Code Playgroud)

是否有更好的方法来对顺序逻辑进行单元测试,或者这是我的汽车设计的问题吗?

--- 编辑 ---- 感谢您的所有回答。正如许多人注意到的那样,我还应该对无效场景进行测试,我也有这些,但这个问题的重点是如何测试有效序列。

Sam*_*ijo 3

我认为每种方法都应该单独、独立地进行测试。

恕我直言,您应该为每种情况准备环境,因此如果您更改 LoadGasoline 方法,则只有 LoadGasoline 测试会中断,并且您不需要看到所有测试因为单个错误而中断。

我不知道你的汽车的状态是什么样的,但是,在 InsertKey 之前,你应该准备一个方法,比如 car.SetTotalGasoline(20); 或在此方法中设置的任何变量,但不依赖于 LoadGasoline 方法的复杂逻辑。

您稍后将需要一个测试(在本例中,不是单元测试)来测试所有序列。