欢迎来到 IT实训基地-南通科迅教育
咨询电话:0513-81107100
浅谈iOS单元测试
2016/10/26
科迅教育
356
南通网页设计培训班哪里专业-基础教学

什么是单元测试?

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。

iOS中单元测试有什么意义?

大型项目开发,功能比较繁琐,代码量比较大,调试某一块功能需要不断的Command+R运行调试,很显然这样的功能是非常非常的低效的,编写过程中以及App功能完成后为检测某一块功能,利用单元测试更有针对性的测试功能。两个字——高效!

添加单元测试

1.新工程默认会勾选

这里写图片描述


2.为老工程添加单元测试
点击File—–>New——->Target
这里写图片描述


熟悉单元测试类

这里写图片描述
UnitTestsDemoTests类是继承与 XCTestCase的

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#import
@interfaceUnitTestsDemoTests : XCTestCase
@end
@implementationUnitTestsDemoTests
- (void)setUp {
[supersetUp];
/**
*  每个test方法执行之前调用
*
*/
}
- (void)tearDown {
[supertearDown];
/**
*  每个test方法执行之后调用
*/
}
- (void)testExample {
/**
*  命名为Example的测试方法
*/
}
- (void)testPerformanceExample {
//主要检测代码的执行性能
[self measureBlock:^{
}];
}
@end

Xcode7默认带了测试性能的方法- (void)testPerformanceExample很有意思的一个方法

?
1
2
3
4
5
6
7
8
9
10
11
- (void)testPerformanceExample {
// This is an example of a performance test case.
[self measureBlock:^{
// Put the code you want to measure the time of here.
for(inti=0;i<1000;i++)
{
NSLog(@"%d",i);
}
}];
}

重复执行上面的代码,会收集每次执行的时间,并计算出平均值,每次执行后会跟平均值进行比较,给你参考性的提示。

这里写图片描述
这里写图片描述

当我们把i的值后面增添一个0有意思一幕发生

这里写图片描述

XCode检测到这一次运行,远超过了平均值,给出了红色的警告,是不是感觉XCode太强大了?

认识测试符号

这里写图片描述警告不通过符号,说明这个模块出现问题

这里写图片描述通过符号,表示这个模块没有问题

自定义测试方法

自定义测试方法必须以test方法名开头(testXXX),例如上面的testExample

自定义方法必须为void返回类型
-(void)testFloatEqual{}

单元测试常用的宏

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
XCTAssertEqualObjects(a1, a2, description, …)
XCTAssertEquals(a1, a2, description, …)
XCTAssertEqualsWithAccuracy(a1, a2, accuracy,description, …)
XCTFail(description, …)
XCTAssertNil(a1, description, …)
XCTAssertNotNil(a1, description, …)
XCTAssertTrue(expr, description, …)
XCTAssertTrueNoThrow(expr, description, …)
XCTAssertFalse(expr, description, …)
XCTAssertFalseNoThrow(expr, description, …)
XCTAssertThrows(expr, description, …)
XCTAssertThrowsSpecific(expr, specificException, description, …)
XCTAssertThrowsSpecificNamed(expr, specificException, aName, description, …)
XCTAssertNoThrow(expr, description, …)
XCTAssertNoThrowSpecific(expr, specificException, description, …)
XCTAssertNoThrowSpecificNamed(expr, specificException, aName, description, …)

Come on 动起来

普通测试

?
1
2
3
4
5
-(void)testFloatEqual{
NSLog(@"这是自定义的测试方法");
floata=100.00;
XCTAssertEqual(a,100.00,@"测试不通过");
}

类测试

先在XCode创建一个类名为PersonModel ,添加一个属性名为name

?
1
2
3
4
5
@interfacePersonModel : NSObject
@property(nonatomic,strong)NSString *name;
@end
?
1
2
3
4
5
6
7
8
9
10
@implementationPersonModel
-(id)init
{
if(self=[superinit]) {
_name=@"单元测试";
}
returnself;
}
@end

在测试单元创建一个类
这里写图片描述

点击右键,New Test Class
这里写图片描述



注意此类继承与XCTestCase

在头文件中引入#import "PersonModel.h"

自定义一个测试方法

?
1
2
3
4
5
-(void)testClassName
{
PersonModel *perModel=[[PersonModel alloc]init];
XCTAssertEqual(perModel.name, @"单元测试",@"name跟预期的不相等呀");
}

今天写了好多模块功能,检测下都是否正常

这里写图片描述

77
关闭
先学习,后交费申请表
每期5位名额
在线咨询
免费电话
QQ联系
先学习,后交费
TOP
您好,您想咨询哪门课程呢?
关于我们
机构简介
官方资讯
地理位置
联系我们
0513-91107100
周一至周六     8:30-21:00
微信扫我送教程
手机端访问
南通科迅教育信息咨询有限公司     苏ICP备15009282号     联系地址:江苏省南通市人民中路23-6号新亚大厦三楼             法律顾问:江苏瑞慈律师事务所     Copyright 2008-