单元测试,XCTestCase的使用与限制

网友投稿 268 2022-10-31


单元测试,XCTestCase的使用与限制

在代码中调用我们之前想检查的代码,并将运行的结果与我们的设想结果在程序中进行比较,如果一致,则说明了我们的代码没有问题,是按照预期工作的。单元测试这就是对这种思想一种实现方式。简言就是首先明确你要让函数或方法实现(行为)什么功能(期望),单元测试帮你检查你的行为能不能实现所有情况下的期望。只需要对对应类建立一个测试类,在测试用例只需要在调用函数时传递给它你需要测试的条件参数,就可以对结果进行判断了。工作量很小。本质是函数测试,不能测试UI。

测试驱动开发(Test Driven Development,以下简称TDD)是保证代码质量的不二法则是第一代敏捷方法。生活中类似的例子来说明TDD的必要性:有经验的砌砖师傅总是会先拉一条垂线,然后沿着线砌砖,因为有直线的保证,因此可以做到笔直整齐;而新入行的师傅往往二话不说直接开工,然后在一阶段完成后再用直尺垂线之类的工具进行测量和修补。TDD的好处不言自明,因为总是先测试,再编码,所以至少你的所有代码的public部分都应该含有必要的测试。测试驱动开发的优点是十分贴近源码,又不影响代码,可以边写测试用例边写代码,工作两很较少,对代码质量提高很有效。不像行为驱动开发需要开始抽象出一套系统进行行为和期望的描述。

XCode5.0及以后版本在建立工程时会自动建立XCTestCase框架及测试例子。

XCTestCase真机调试使用,单元测试部分需要的配置:

1.  EditScheme...,设置test为Debug。设置Executable为和run中的名称相同。

2.  设置研发者证书。

3.  设置测试target的和原工程的信息属性一直,特别时Bundle identifier要一致或和配置的证书指定Bundleidentifier一直(若使用两个不同的证书的情况)

XCTestCase作为XCode自带的单元测试具有一下特征:

1. 只能通过参数传递参数,测试类方法的返回值是否达到期望的结果。

2. 不能通过测试类方法的调用后对全局变量的影响。

3. 不能通过测试类方法中有直接读取UI元素(如:文本框)并且对结果产生影响的类方法。

4. 不适合直接测试表格UITabeView,若测试UITabeView需要要用到第三方库OCMock,工作量很大,并且源代码修改为表格数据源和控制器分开,这样也不适合大多少OC的习惯。这样写测试用例还不如直接运行UI设置断点调试呢。

5. NSString和char数组的转换及char数组交换不能进行单元测试,否者会产生崩溃。

6. 不能测试无返回值的类函数。

点XCode工具栏的Product->Test可以启动所有测试用例。带绿勾的时通过的例子,带红叉的时单元测试失败的例子,没有运行过的新测试用例是灰色的菱形图标。测试用例可以点绿勾或红叉直接启动该测试用例。

XCTestCase使用的例子,FLDDLogVerbose是自定义打印日志函数可以去掉:

1. 公有类函数,由于这类函数都是与UI没有直接关系,只是与输入参数有关,通常有输出参数,这类函数是最适合采用单元测试测试的函数。switchNNStringValue函数的功能对NSString字符串的两个指定位置的字符进行交换。简单吧?3行代码测试一个分支,所以工作量很小,对项目进度影响。经过单元测试减少的问题单修改的时间远比使用它所花的时间长。

#import "CGeneralFunction.h"

2. 普通函数测试用例:

#import "LoginViewController.h"

#import "GlobalVariable.h"

#import "UITextFieldValue.h"

3. 不能使用测试场景:

3.1建立页面控制器页面(UIViewController及子类)后通过,给它的文本框赋值,当调用函数根本就不能影响类函数的文本框的值,并且是空指针。实际上这样的类函数就不能测试。

3.2 实际上就是你给它申请一个文本框也影响不了类函数种所获取到的文本框的值为空。所以单元测试时,只有输入参数才能影响类函数种的处理,就是像要用单元测试就要按照单元测试的规则写函数才能测试。

3.3单元测试用例不能拿全局变量当判断条件,因为类函数再调用完并不能影响测试用例种的全局变量,可见类函数和测试用例应该属于不同的模块,全局变量虽然同名,但是却是两个模块不同的全局变量。

XCTestCase崩溃的例子:

1. 表格处理函数在控制器里直接实现用OCMock模拟时崩溃。

2. NSString和char数组的转换及char数组交换不能进行单元测试,否者会产生崩溃。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于IntelliJ IDEA 打包代码报错的问题
下一篇:内存泄漏分类
相关文章

 发表评论

暂时没有评论,来抢沙发吧~