iOS单元测试和UI自动化测试

第一部分:单元测试

1、单元测试简介

   在计算机编程中,单元测试(又称为模块测试, Unit Testing)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、派生类(子类)中的方法

    通常来说,程序员每修改一次程序就会进行最少一次单元测试,在编写程序的过程中前后很可能要进行多次单元测试,以证实程序达到软件规格书(en:Specification)要求的工作目标,没有程序错误.

    一个重要的概念:TDD(Test-Driven Development),即测试驱动开发,该模式要求开发者在编写某个功能的代码之前先将其测试代码写好,然后编写实现代码并进行测试,从而保证实现的代码不会出现问题。因此整个项目的开发进度将由测试来驱动,这有助于开发出高质量而又正确的代码,实现敏捷开发

2、单元测试工具

   OCUnit(Xcode自带的单元测试)

        1、简介:Xcode自带的单元测试工具

        2、测试方法:

             1)特点: 以test开头,没有返回值,没有参数

              2)执行顺序:字典序排序(数字>小写字母>大写字母)

             3)系统方法:

                 1)setUp:所有测试方法执行之前都会执行这个方法

                 2)tearDown:所有测试方法执行之后都会执行这个方法

                 3)testExample:一个测试用例,里面可以写测试代码

                 4)testPerformanceExample:性能测试,测试一段代码执行时常

       3、断言宏:

                框架中包含了18个断言宏,用来判断测试成功或失败

      4、测试用例Demo地址:https://github.com/guodongyangwen/iOS-UnitTest.git


   OCMock(提供模拟条件)

       1、介绍:

        测试过程中,对于一些不容易构造或不容易获取的对象,此时你可以创建一个虚拟的对象(mockobject)来完成测试其实现思想就是根据要mock的对象的class来创建一个对应的对象,并且设置好该对象的属性和调用预定方法后的动作(例如返回一个值,调用代码块,发送消息等等),然后将其记录到一个数组中,接下来开发者主动调用该方法,最后做一个verify(验证),从而判断该方法是否被调用,或者调用过程中是否抛出异常等,宗旨就是没有条件,自行创造条件。

      2、应用场景:

            1)可能要尝试100此才能返回一个NSError,通过mockObject可以自行创建一个NSError对象来测试出错时是否符合预期

            2)服务器是内网,在外地或者外网访问不了,可以创建一个虚拟服务器,并返回一些你指定的数据,从而绕过服务器

            3)访问一个数据库,但是访问开销很大,这时可以虚拟一个数据库,并且返回一个自行定制的数据

     3、添加到工程中

    4、测试用例Demo地址:https://github.com/guodongyangwen/iOS-UnitTest.git


   GHUnit(带有GUI的开源测试框架)

          1、简介:带有GUI的单元测试框架

          2、断言宏:开头都以GHAssert开头

          3、可视化:

可以通过可视化的界面看到那些测试用例成功还是失败,点击失

败的测试用例还可以看到终端输出的日志,查看错误的原因

4、配置

5、Demo地址:https://github.com/guodongyangwen/iOS-UnitTest.git


UI自动化测试:

    1、Automation:用于做UI自动化测试

    2、通过JS语言实现,可以自己编辑一个JS文件然后加载进来并执行对应的操作。

    3、同事也支持自动录制,录制的同时会自动生成JS脚本,这个脚本也可以保存成JS脚本文件。

    4、Demo地址:https://github.com/guodongyangwen/iOS-UnitTest.git


总结

单元测试非常适合用来做APP的逻辑以及网络接口的测试

通过UI自动化测试以前旧功能或者小的改动

版本代码完成后根据测试人员编写的测试用例进行充分自测

你可能感兴趣的:(iOS单元测试和UI自动化测试)