浅谈iOS单元测试

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

什么是单元测试?

单元测试(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

相关文章
|
1月前
|
iOS开发
iOS自动混淆测试处理笔记
iOS自动混淆测试处理笔记
12 0
|
2月前
|
iOS开发
  iOS 自动混淆测试处理笔记
  iOS 自动混淆测试处理笔记
|
2月前
|
Java 测试技术 API
安卓APP和iOS APP在测试上的区别是什么?
安卓APP和iOS APP在测试上的区别是什么?
|
3月前
|
人工智能 测试技术 iOS开发
iOS性能指标和性能测试工具
iOS性能指标和性能测试工具
|
3月前
|
移动开发 数据安全/隐私保护 iOS开发
ios app真机测试到上架App Store详细教程-必看
ios app真机测试到上架App Store详细教程-必看
46 0
|
6月前
|
iOS开发
iOS自动混淆测试处理笔记
自动混淆测试是针对 oc 类和oc方法这两个模块进行自动混淆ipa,并ipa安装到设备中运行,通过检测运行ipa包是否崩溃,来对oc类和oc方法进行筛选。如果崩溃,则该类名或方法名不可混淆。 当没有勾选oc类和oc方法,会自动测试所有的可执行文件中的oc类和oc方法名。如果有选中数据,则只会测试选中的数据集合。除了 oc 类和oc方法这两个模块会自动筛选测,其他的模块需要手动配置
|
6月前
|
存储 数据安全/隐私保护 开发者
iOS- 最全的真机测试教程
iOS- 最全的真机测试教程
|
7月前
|
运维 网络协议 测试技术
iOS 自己搭建的IPv6环境测试正常,任然被拒
iOS 自己搭建的IPv6环境测试正常,任然被拒
49 0
|
8月前
|
测试技术 iOS开发
iOS PushMeBaby 远程推送测试
iOS PushMeBaby 远程推送测试
124 0
|
9月前
|
JavaScript 测试技术 Shell
03-MacOS上搭建Appium的iOS测试环境
03-MacOS上搭建Appium的iOS测试环境