浅谈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

相关文章
|
4月前
|
测试技术 Linux 虚拟化
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
详细的VMware虚拟机安装macOS Big Sur的保姆级教程,包括下载VMware和macOS镜像、图解安装步骤和遇到问题时的解决方案,旨在帮助读者顺利搭建macOS虚拟机环境。
187 3
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
|
4月前
|
测试技术 开发工具 iOS开发
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
这篇文章是iOS自动化测试方案的第三部分,介绍了在没有MacOS系统条件下,如何使用WDA(WebDriverAgent)结合Python客户端库facebook-wda和tidevice工具,在Windows系统上实现iOS应用的自动化测试,包括环境准备、问题解决和扩展应用的详细步骤。
377 1
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
|
4月前
|
测试技术 数据安全/隐私保护 iOS开发
iOS自动化测试方案(四):保姆级搭建iOS自动化开发环境
iOS自动化测试方案的第四部分,涵盖了基础环境准备、iPhone虚拟机设置、MacOS虚拟机与iPhone真机的连接,以及扩展问题和代码示例,确保读者能够顺利完成环境搭建并进行iOS自动化测试。
421 0
iOS自动化测试方案(四):保姆级搭建iOS自动化开发环境
|
4月前
|
测试技术 虚拟化 iOS开发
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
这篇文章是iOS自动化测试方案的第二部分,详细介绍了在Xcode开发者工具中构建WebDriverAgent(WDA)应用到iPhone的全过程,包括环境准备、解决构建过程中可能遇到的错误,以及最终成功安装WDA到设备的方法。
239 0
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
|
4月前
|
测试技术 开发工具 虚拟化
iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程
这篇文章提供了一份保姆级的教程,指导如何在MacOS虚拟机上安装Xcode,包括环境准备、基础软件安装以及USB扩展插件的使用,以实现iOS自动化测试方案的第一步。
222 0
iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程
|
4月前
|
测试技术 Swift iOS开发
探索iOS自动化测试:使用Swift编写UI测试
【8月更文挑战第31天】在软件开发的海洋中,自动化测试是保证船只不偏离航线的灯塔。本文将带领读者启航,深入探索iOS应用的自动化UI测试。我们将通过Swift语言,点亮代码的灯塔,照亮测试的道路。文章不仅会展示如何搭建测试环境,还会提供实用的代码示例,让理论知识在实践中生根发芽。无论你是新手还是有经验的开发者,这篇文章都将是你技能提升之旅的宝贵指南。
|
7月前
|
Android开发 数据安全/隐私保护 iOS开发
ios和安卓测试包发布网站http://fir.im的注册与常用功能
ios和安卓测试包发布网站http://fir.im的注册与常用功能
324 0
ios和安卓测试包发布网站http://fir.im的注册与常用功能
|
7月前
|
iOS开发
iOS自动混淆测试处理笔记
iOS自动混淆测试处理笔记
33 0
|
7月前
|
iOS开发
  iOS 自动混淆测试处理笔记
  iOS 自动混淆测试处理笔记
|
7月前
|
Java 测试技术 API
安卓APP和iOS APP在测试上的区别是什么?
安卓APP和iOS APP在测试上的区别是什么?
220 0