我正在为视频游戏的转向系统编写单元测试。系统具有多种行为(由于原因A避免了该区域,由于原因B避免了该区域,每个行为都向该区域的地图添加了一些上下文。然后,一个单独的函数解析该地图并产生所需的运动。
我在决定如何编写行为的单元测试时遇到了麻烦。正如TDD所建议的,我只对行为如何影响所需的运动感兴趣。例如,避免-原因-A会导致移动远离建议的不良位置。我实际上并不在乎行为如何或为何为地图添加上下文,仅是所需的运动远离该位置。
因此,我对每种行为的测试都建立了行为,将其写入地图,然后执行地图解析功能来计算出所需的动作。如果该运动满足我的要求,那么我很高兴。
但是,现在我的测试取决于行为是否正常运行以及映射解析功能是否正常运行。如果解析功能失败,那么我将获得数百个失败的测试,而不是几个。许多测试写作指南都建议这是一个坏主意。
但是,如果我通过模拟映射直接针对行为的输出进行测试,那么我肯定与实现紧密结合了吗?如果我可以通过使用稍微不同的行为从地图上获得相同的期望运动,则测试应该仍然可以通过。
所以现在我正遭受认知失调。构造这些测试的最佳方法是什么?