[关闭]
@xiu-tanwy 2016-11-10T07:52:58.000000Z 字数 1302 阅读 342

单元测试

编程实践 单元测试


什么是单元测试。
单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的,很明确的功能是否正确。

执行单元测试,是为了证明某段代码的行为确实和开发者所期望的一致。
这个简单有效的技术就是为了令代码变得更完美。

函数式编程更适合进行单元测试?
单元测试只是针对源码,低层次,为程序员而设计的测试。

如果在正式环境下运行单元测试,那么就不算是单元测试了,而是其他类型的测试。

测试代码必须要做以下这几件事情:

  • 准备测试所需要的各种条件(创建所有必须的对象,分配必要的资源等等)。
  • 调用要测试的方法。
  • 验证被测试方法的行为和期望是否一致。
  • 完成后清理各种资源。

各种名词 ATDD TDD BDD。想办法在公司进行推行实践。

单元测试,那么从那些方面进行测试呢?也就是测试的具体部位。可以从以下6个方面进行,Right-BICEP

名称 含义
Right 结果是否正确
B 是否所有的边界条件都是正确的?
I 能查一下反向关联吗
C 能用其他手段交叉检查一下结果吗
E 你是否可以强制错误条件发生?
P 是否满足性能要求?

CORRECT 边界条件(Boundary Conditions)

一致性(Conformance) ---关键是养成这种思维模式,在进行单元测试的时候,会自然的考虑这些方面。

一个已知方法的前条件(preconditions)是指:系统必须处于什么状态下该方法才能运行。需要确认:当前条件不能满足的时候,程序的行为仍然是正确的。

在方法的最后,后条件(postconditions)是指:你的方法将会保证哪些状态发生。程序直接返回的结果显然是要检查的,单如果程序具有任何副作用,那你也需要对他们进行检查。

单元测试的目标是一次只验证一个方法,要是你的测试代码依赖与系统的其他部分,甚至系统的多个其他部分时候,需要构造Mock Objects.

Mock对象也就是真实对象在调试期的替代品。
Mock这个还不懂

持续集成(构建和测试)工具
代码覆盖工具
bug并不是均匀分布于源代码之中的,相反,它们更倾向扎堆于一块问题区域中。

遗留代码&新代码开发
单元测试一个最重要的作用是防止倒退(back-sliding):避免维护性的更正和修缮导致现存特性产生bug. 也就是回归测试(确保新的代码没有损坏任何已经工作正常的代码)

遗留代码做测试,不需要针对所有的代码,而是针对最有可能出问题的代码。

记住,一口吃不成一个胖子;任何事情都需要一步一个脚印地做。

能成功的团队一般都有代码评审的习惯。正式(check list 和小型的陪审团)或者非正式(资深的员工查看代码,或者是使用极限编程的结对编程一起来编码。)

shy code
code shouldn't reveal too much of itself, and shouldn't be too nosy into other affairs(代码不应该透露太多自己,不太爱管闲事的其他事务)

在一个软件系统中,任何面向外部的部分都需要是健壮的,而且不能允许让任何不正确的,或者无效的数据顺利通过。

如果没有验证任何数据或者行为,那么你给自己营造的只不过是一种虚无的安全感。

真正的测试是要检查结果。没有检查结果的测试只是在浪费时间而已。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注