①单元的定义:代码中可度量的最小单元(函数、方法)数据库
②检查和验证:不一样的输入对应的输出是否与预期一致网络
①自动化:单元测试应该是全自动执行的,非交互式的。框架
②非相互依赖:单元测试方法的执行顺序不该该影响执行结果,各个方法之间不该该相互依赖。模块化
③多设置断言:尽可能多设置断言,把须要测试的结果都进行测试。函数
④结果惟二:单元测试只能有两种结果,经过或失败。性能
①Arrange 准备阶段:设置前提条件,好比初始化对象、模拟数据等等。单元测试
②Act 行为阶段(执行动做):调用被测试的方法,并获得返回结果。测试
③Assert 断言阶段(验证结果):把调用目标方法返回的值和预期的值进行比较,若是和预期一致说明测试经过,不然就是失效。3d
①简单模拟一个用户类及种子数据对象
②准备写好待测试的生产代码(以客户端开发经常使用的单例举例)
③编写单元测试
Mock是模拟的意思,Mock框架就是用来模拟对象的一个技术。通常在一下几种状况下用:
①真实对象具备不肯定行为(好比不可预测的结果,相似股票)
②对象很难被建立
③对象的某些行为很难触发(例如网络错误)
④测试须要验证某个回调函数是否被调用
⑤对象并不存在(多端的状况下或者和其余项目或服务打交道的时候)
“2”中的意思也就是说,当针对这个方法输入“南山必胜客”的时候,方法会返回Returns里面的对象。(例子很差,可是这么个意思)
①提升代码质量:
对于每一个最小的单元,针对不一样输入对应的输出能够和预期结果作对比,减小由于参数致使的异常问题,代码变得更加健康,增长新需求时不用担忧影响原来代码逻辑。
②代码耦合度低、模块化:
若要对一个模块单元进行单元测试,须要将每一个单元拆分得相对独立,使得代码的逻辑、结构清晰,减小单元之间的依赖。代码出现bug更容易定位。
③代码可重用:
通过单元测试的代码,既稳定又独立,能够更加方便的在其余项目或者项目重构时重复利用。
④代码可读性强:
单元测试某种程度上至关于系统的文档。借助于查看单元测试提供的功能和单元测试中如何使用单元,开发人员能够直观的理解每一个单元的功能。
①浪费开发时间(写单元测试须要大量的时间,不如直接写具体的实现),有些模块根本没法进行单元测试(无返回值的方法、UI界面)
②不能发现集成错误、性能问题、或者其余系统级别的问题。单元测试结合其余软件测试活动更为有效。