浅谈iOS单元测试

什么是单元测试?

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

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

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

添加单元测试

1.新工程默认会勾选

这里写图片描述

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

熟悉单元测试类

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

#import <XCTest/XCTest.h>

@interface UnitTestsDemoTests : XCTestCase

@end

@implementation UnitTestsDemoTests

- (void)setUp {
    [super setUp];
    /**
     *  每个test方法执行之前调用
     *
     */
}

- (void)tearDown {
    [super tearDown];
    /**
     *  每个test方法执行之后调用
     */
}

- (void)testExample {
    /**
     *  命名为Example的测试方法
     */
}

- (void)testPerformanceExample {
    //主要检测代码的执行性能
    [self measureBlock:^{

    }];
}

@end

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

- (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(int i=0;i<1000;i++)
        {
            NSLog(@"%d",i);
        }
    }];
}

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

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

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

这里写图片描述

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

认识测试符号

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

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

自定义测试方法

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

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

单元测试常用的宏

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 动起来

普通测试

-(void)testFloatEqual{
    NSLog(@"这是自定义的测试方法");
    float a=100.00;
    XCTAssertEqual(a, 100.00,@"测试不通过");
}

类测试

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

@interface PersonModel : NSObject
@property(nonatomic,strong)NSString *name;

@end
@implementation PersonModel
-(id)init
{
    if (self=[super init]) {
        _name=@"单元测试";
    }
    return self;
}
@end
  1. 在测试单元创建一个类
    这里写图片描述

  2. 点击右键,New Test Class
    这里写图片描述
    注意此类继承与XCTestCase

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

  4. 自定义一个测试方法

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

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

这里写图片描述
真开心,利用单元测试检测,都正常,开开心心下班去。O(∩_∩)O

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值