swift单元测试(一)基本概念

1、为什么要进行单元测试?

答:单元测试是为了避免你的app变成充满bug的软件,让我们在开发过程中能更好的发现缺陷,提高代码质量,也能保证在代码重构时及时发现改动带来的问题。

 

2、单元测试应该测什么?

答:1)核心功能:模型类和方法,以及它们和控制器的交互

        2)最常用的UI操作

        3)边际条件

        4)bug修复

 

3、单元测试需要遵循的原则是什么?

答:FIRST原则--测试的最佳实践,遵循FIRST原则会让你的测试更加清晰有用

        1)Fast:测试的运行速度要快,这样人们就不介意你运行它们

        2)Independent/Isolated:一个测试不应当依赖于另一个测试

        3)Repeatable:同一个测试,每次都应该获得相同的结果。外部数据提供者和并发问题会导致间歇性的出错

        4)Self-validating:测试应当是完全自动化的,输出结果要么是pass要么是fail,而不是依靠程序员地日志文件的解释

         5)Timely:理想情况下,测试的编写,应当在编写要测试的产品代码之前

 

4、单元测试的有点有哪些?

答:1)使开发人员更自信

        2)代码不会退化。不会因为改了bug而导致另外的bug

        3)在有良好的单元测试情况下,可以放心的进行代码重构

        4)良好的单元测试,本身就是使用说明,有时比文档更有用

 

目前很多的开源库、开源项目都加入了单元测试,例如swift版本的AFN--Alamofire,就编写了大量的测试代码,目前单元测试主要分为TDD和BDD两种思维模式。

 

5、什么是TDD?

答:TDD是 Test Drive Development,指的是测试驱动开发,相对于普通思维模式来说,是一种比较极端的做法我们一般都是先编写产品代码,在写测试代码,而TDD恰好相反,其思想是先写测试代码,然后再编写相应的产品代码。

        TDD一般遵循 red->green->refactor 的步骤,即(报错->通过->重构),因为是先写了测试代码,而还未添加产品代码,所以编译器会给出红色报警,当把相应的产品代码添加完善后,并让单元测试用例通过测试,通过的状态为绿色,如此反复直到各种边界和测试都进行完毕,此时我们就可以得到一个稳定的产品,所以可以大胆的对产品代码进行重构,只要保证项目最后是绿色状态,就说嘛重构的代码没问题。

       TDD的过程,类似于脚本语言的交互式编程,写几行代码,就可以检查运行结果,如果结果有误,则要把最近的代码充血,知道单元测试结果正确为止。

 

6、什么是BDD?

答:BDD是Behavior Drive Development ,指的是行为驱动开发,常用于敏捷开发中使用的测试方法,其主要是为了解决XCTest苹果官方测试框架测试时难以mock和stub的问题。

        BDD提倡使用Given...When...Then 这种类似自然语言的描述来编写测试代码,在objc中,现在比较流行的BDD框架有specta、Kiwi、ceder,github上start较多的是Kiwi,在swift中,专用的 BDD 测试框架是QuickSleipnir

        例如Alamofire中下载的测试:

 

7、什么是Stub?

答:Stub是指人为地让一个对象对某个方法返回我们事先规定好的值。

        Stub运用的主要场景是你需要和别的开发人员协同开发时,别人的模块尚未完成,而你的模块需要用到别人的模块,这时就需要Stub。例如,后端的接口未完成,你的代码已经完成了,Stub可以伪造一个调用的返回。

        ojbc下可以使用OHHTTPStubs来伪造网络的数据返回。swift下,仍要手动写stub。

 

8、什么是Mock?

答:Mock是一个非常容易和stub混淆的概念,简单来说,我们可以将Mock看做是一种更全面和更智能的Stub。

        明确来说,Mock其实是一个对象,它是对现有类行为的一种模拟(或是岁现有接口实现的模拟)。

        Mock和Stub最大的区别在于Stub只是简单的方法替换,不涉及新的对象,被stub的对象可以是业务代码中真正的对象,而Mock行为本身产生新的(不可能在业务代码中出现)的对象,并遵循类的定义响应某些方法。

       Mock让你可以检查某种情况下,一个方法是否被调用,或者一个属性是否被正确设值。objc下可以使用OCMock来mock对象。但是,由于swift的runtime比较弱,所以,swift上一般要手动写mock。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值