@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(代码不应该透露太多自己,不太爱管闲事的其他事务)
在一个软件系统中,任何面向外部的部分都需要是健壮的,而且不能允许让任何不正确的,或者无效的数据顺利通过。
如果没有验证任何数据或者行为,那么你给自己营造的只不过是一种虚无的安全感。
真正的测试是要检查结果。没有检查结果的测试只是在浪费时间而已。