如何进行单元测试(一)

【序】上周我在参加一个敏捷讨论会时发现同事们对如何做单元测试比较关心,而我在之前有些经验教训,因此萌发了写些文章的想法。为了便于阅读,也为了便于以后补充,我把文章分成了几段。

 

敏捷开发强调单元测试的作用,但是不少接触敏捷开发不久的开发人员经常觉得不容易对代码进行单元测试,或者写出来的单元测试不好维护。我之前为这些问题也苦恼了很久,在一年的实践过程中积累了一些经验,在此进行总结,希望能够抛砖引玉,与大家一起进步。

 

在我的观点中,好的项目测试不只取决于测试人员,更取决于开发人员;只有代码设计合理了,单元测试和集成测试才容易进行;好的单元测试与好的代码设计是不矛盾的。一段容易进行单元测试的代码设计往往体现了高内聚、低耦合、易于维护等特征;一段不容易进行单元测试的代码设计,则意味着单元测试的方法不对,或者代码设计得不合理。正是在这种意义上,我认为在敏捷开发的单元测试实践中遇到困难时,应当去审视使用的单元测试的方法或者代码设计,而不是怀疑单元测试的可行性和必要性。

 

在一次次的审视中,我慢慢领悟到单元测试最重要的原则是减少依赖,主要体现为以下三方面:

1.  减少测试对外部环境的依赖

2.  减少测试对外部代码的具体实现的依赖

3.  减少测试对内部函数之间的依赖

 

具体的解决方法主要有以下几种:

1. 代码设计时, 对函数内部较独立的代码进行包装

2. 代码设计时,坚持面向接口编程

3. 单元测试时,每个test case维护自己的上下文环境

4. 单元测试时,对依赖的函数进行mock

5. 单元测试时,对被测试类的子类进行单元测试

6. 单元测试时,对被测试类的影子类进行单元测试

 

接下来我将以场景举例的形式说明以上原则、解决方法的含义以及使用的方法。由于我目前主要从事PHP项目开发,本系列文章以PHP语言来阐述,行文里采用伪代码进行描述。另外,本系列文章假定读者对PHPUnit测试框架有所了解,因此不涉及比较基本的单元测试问题。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值