php(mvc框架 erp流程系统)怎么写单元测试

最近接触了phpunit单元测试,对于一个erp流程系统,要怎么写单元测试呢?是直接写http传参请求接口验证返回内容,还是对业务代码内处理数据的model层进行验证?

阅读 1.8k
1 个回答

我曾经也有这么个疑问,但是没有问出来,经历多了之后明白单元测试是咋回事之后,我来进行说一下。
首先,我们从程序上来说:
程序 = 数据结构 + 算法
然后,我们再从程序得功能上来说,程序都是以方法或者函数为最小逻辑单位,而不管方法还是函数再复杂,其实对于调用者来说,只包含两部分,也就是:
输入 -> 输出
所以,单元测试的核心思想就是:

  1. 设定输入数据;
  2. 设定结果数据;
  3. 调用程序;
  4. 验证程序执行结果和设定的结果是否匹配。

也就是说,单元测试的核心思想就是手动检查输入的数据以编写的程序进行执行之后,所拿到的结果是否和真正的结果一致。

有了这个单元测试的核心思想,也就是正因为这个,也才使得单元测试可行;

如果你发现你的程序没法写单元测试,那说明你的程序设计肯定不合理。

那么,你问出这个问题的初始动机是什么呢?这里我也可以说道说道,从MVC这个思想来看,调用了程序之后,拿到的就是一个渲染好的页面,从道理来说,这就是输出结果。

但是,你不要以这种心态来看,如果你这么想的话,那么你的MVC设计应该来说是不合理的,V层,也就是view层,从道理上来说,只管渲染,而不处理逻辑的,如果处理逻辑了,说明你在上一层,估计是C层,这一层设计得不合理,导致view层还要处理逻辑,那么你肯定没法写单元测试。

M层,也就是model层,这一层,通常来说应该是数据库存储层,这一层应该来说只管增删改查,不做太多逻辑操作,实际逻辑应该是写在C层的,而写在C层,从代码执行层面上来看,似乎是必须要经过请求才能调用C层,所以针对C层不好写测试。

所以,针对MVC设计,你应该自己增加一个逻辑层,这个逻辑层尽量把业务逻辑拆分得更加细分,这样的话,单元测试针对细分的单元写验证就可以了,如果写的时候发现没法写单元测试,再做拆分,这样子的话,整套业务逻辑性,程序的逻辑性就很清晰,解耦也可以做得很好。

这就是一整套思想,希望你能看完。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题