使用TDD思想 用xState创建一个合成大西瓜的状态机

512 阅读2分钟

Xstate和TDD

1、为什么要用XState

为了减少意想不到的bug!摆脱人设计的局限。

项目复杂后,不同的事件在不同的状态发生,程序员当初设想的状态是一种人的殚精竭虑,不如有限状态机这样能穷尽所有可能。

从而达成只有没想到的,没有发生混乱的。

2、TDD思想

// 测试驱动开发
// 先写一个测试,想好这个测试需要完成的内容
// 由于没有实现具体代码,必然报错
// 然后再去实现这个测试所需的具体代码
// 然后对实现的代码进行整理优化
// 进入下一个循环,开始构建新的测试

先写测试用例可以让人一下子抓住核心问题,最需要测试的是什么功效,从而引导人的思考,不容易产生无从下手的感觉

测试用例是一种思路的体现,留下了足够的开发痕迹,便于他人在现有基础上新增测试用例,修改代码有天然的迭代特性

加入你要开发一辆汽车,TDD的想法是先设计滚动功能,测试成功!这时开发出的可能是块滑板,但它是一个能用的滑板;再设计出动力系统的测试,编写代码,测试成功,这时开发出的可能是一辆自行车,有动力系统了!再对动力系统进行内燃机的标准测试,这时开发出的可能是一辆摩托车;再对代码进行安全性功能测试,才变成一辆汽车!

这种方式和先设计出汽车的轮廓,然后一步步去完成代码有什么不同呢?

因为在现实中,面对不成熟的业务,人实际上不知道那个汽车长个什么样子,那些功能必须,这样做了之后有什么后果,是在一次次测试中得出的。只有面对成熟的业务,就像汽车这样,经过100年的探索,最终基本定于一格,才能勉强做到先画设计图,然后照图画瓢,最后拼装起来,确实能跑!

软件行业其实少有这种规范,即使有,只怕是重复造轮子了;所以采取TDD实际上是一种节省成本,且靠谱的方案。

项目环境和工具

react + testing-library + Xstate

环境布置非常简单,在IDE里用create-react-app创建一个新项目即可

XState官网上有详细的react案例 XState官网

待续