`

(转)【ios】单元测试

    博客分类:
  • IOS
阅读更多

 转自:http://www.jianshu.com/p/009844a0b9ed

 

![Uploading QQ20160129-3_262826.png . . .]####什么是单元测试?
一听到单元测试这个词感觉很高端,其实单元测试就是为你的方法多专门写一个测试函数。以保证你的方法在不停的修改开发中。保持正确。如果出错,第一时间让你知道,这样从最小单位开始监控来保证软件的质量。

什么时候用到单元测试:

1、写完代码以后:想要验证一下自己写的代码是否有问题。
2、写代码之前:就是写代码之前所有的功能分模块的设计好,测试通过了再写。(我反正是没用过)。
3、修复某个bug后:一般修复完某个bug,为了确保修复是成功的,会写测试。

怎么写单元测试

好像废话有点多了,还是直接奔主题吧。
创建一个工程,名字随便取,直接勾选include Unit Tests


QQ20160129-0.png


万一我忘了勾选怎么办呢?可以有其他方式创建File-->new-->target-->iOS-->iOS Unit Testing Bundle。名字自己看着办吧。




QQ20160129-1.png

 

工程创建好后,那要怎么开始测试呢?
找到系统单元测试Testes文件夹中.m文件看中会到看到几个方法,我们来看下这个几个方法是什么时候调用和他们各种的作用


QQ20160129-2.png
  - (void)setUp {
[super setUp];
// Put setup code here. This method is called before the invocation of each test method in the class.
//初始化的代码,在测试方法调用之前调用
}

- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
// 释放测试用例的资源代码,这个方法会每个测试用例执行后调用
[super tearDown];
}

- (void)testExample {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
// 测试用例的例子,注意测试用例一定要test开头

}

- (void)testPerformanceExample {
// This is an example of a performance test case.
// 测试性能例子
[self measureBlock:^{
    // Put the code you want to measure the time of here.
// 需要测试性能的代码
}];
}

在ViewController中写一个简单的方法

- (int)getNum;

实现:

- (int)getNum {

return 100;
}

在测试的文件中导入ViewController.h,并且定义一个vc属性

 #import <XCTest/XCTest.h>

#import "ViewController.h"

@interface ____Tests : XCTestCase

@property (nonatomic,strong) ViewController *vc;


@end

@implementation ____Tests

测试用例的实现

- (void)setUp {
[super setUp];

// 实例化需要测试的类
self.vc = [[ViewController alloc] init];
}

- (void)tearDown {
// 清空
self.vc = nil;

[super tearDown];
}

- (void)testMyFuc {

// 调用需要测试的方法,
int result = [self.vc getNum];
// 如果不相等则会提示@“测试不通过”
XCTAssertEqual(result, 100,@"测试不通过");
}

command+u快捷方式运行,或者produce-->test都行,
工程就跑起来了


QQ20160129-3.png


我们可以在在控制台清晰的看到我们要测试的用例子通过了,测试通过的测试方法会有绿色的钩。

这时候我们改下断言,把100随便改成一个数,120.再comand+u运行下,看下什么情况

QQ20160129-4.png

很明显是能不能通过的,因为我们要测试的方法返回值是100,

自带的测试框架还能测试某个方法的性能,

- (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<100; i++) {

        NSLog(@"dd");
    }
}];

}

我们在例子中添加一个for循环,测试其性能。command+u运行就能看到如图:


QQ20160129-5.png

能够非常直观的看出其调用的时间,可以用其来对比性能的优劣。

另外XCTest还支持异步单元测试,我就不在这里展开了。最后附上常用的断言及解释。

  XCTFail(format…) 生成一个失败的测试; 
XCTAssertNil(a1, format...)为空判断,a1为空时通过,反之不通过;
XCTAssertNotNil(a1, format…)不为空判断,a1不为空时通过,反之不通过;
XCTAssert(expression, format...)当expression求值为TRUE时通过;
XCTAssertTrue(expression, format...)当expression求值为TRUE时通过;
XCTAssertFalse(expression, format...)当expression求值为False时通过;
XCTAssertEqualObjects(a1, a2, format...)判断相等,[a1 isEqual:a2]值为TRUE时通过,其中一个不为空时,不通过;
XCTAssertNotEqualObjects(a1, a2, format...)判断不等,[a1 isEqual:a2]值为False时通过;
XCTAssertEqual(a1, a2, format...)判断相等(当a1和a2是 C语言标量、结构体或联合体时使用, 判断的是变量的地址,如果地址相同则返回TRUE,否则返回NO);
XCTAssertNotEqual(a1, a2, format...)判断不等(当a1和a2是 C语言标量、结构体或联合体时使用);
XCTAssertEqualWithAccuracy(a1, a2, accuracy, format...)判断相等,(double或float类型)提供一个误差范围,当在误差范围(+/-accuracy)以内相等时通过测试;
XCTAssertNotEqualWithAccuracy(a1, a2, accuracy, format...) 判断不等,(double或float类型)提供一个误差范围,当在误差范围以内不等时通过测试;
XCTAssertThrows(expression, format...)异常测试,当expression发生异常时通过;反之不通过;(很变态) XCTAssertThrowsSpecific(expression, specificException, format...) 异常测试,当expression发生specificException异常时通过;反之发生其他异常或不发生异常均不通过;
XCTAssertThrowsSpecificNamed(expression, specificException, exception_name, format...)异常测试,当expression发生具体异常、具体异常名称的异常时通过测试,反之不通过;
XCTAssertNoThrow(expression, format…)异常测试,当expression没有发生异常时通过测试;
XCTAssertNoThrowSpecific(expression, specificException, format...)异常测试,当expression没有发生具体异常、具体异常名称的异常时通过测试,反之不通过;
XCTAssertNoThrowSpecificNamed(expression, specificException, exception_name, format...)异常测试,当expression没有发生具体异常、具体异常名称的异常时通过测试,反之不通过
分享到:
评论

相关推荐

    iOS单元测试最佳实践

    在进行iOS单元测试时,为了能够有效地进行代码测试和保证软件质量,开发者们通常会遵循一系列的最佳实践。这些最佳实践不仅能够帮助开发者们更加高效地编写测试用例,还能够确保测试用例能够覆盖应用的关键部分,...

    iOS单元测试大礼包

    这个“iOS单元测试大礼包”为你提供了全面的学习资源,包括8个演示实例(demo)和3个视频教程,帮助你深入理解和掌握iOS单元测试的技术和实践。 首先,我们要理解什么是单元测试。单元测试是对软件中的最小可测试...

    iOS单元测试实例

    "iOS单元测试实例"提供了关于如何在iOS应用中实现和利用单元测试的实践案例。在这个实例中,我们将探讨`iOS_Calc`和`Calculator-iOS`两个项目,它们可能是模拟一个简单计算器的应用,用于演示单元测试的基本概念和...

    (李智维)单元测试与自动化.pdf

    ### 单元测试与自动化——李智维 iOS 开发经验分享 #### 一、作者背景介绍 李智维,一位年轻的技术人才,21岁时已积累了丰富的开发经验。他在中学时期就参加了算法竞赛,展现了其对编程技术的兴趣与天赋。大学期间...

    iOS测试指南PDF

    这份PDF文档详细涵盖了iOS应用开发中的各种测试环节,包括单元测试、功能测试、性能测试、兼容性测试以及自动化测试等关键领域。 一、单元测试 单元测试是iOS应用开发中的基础测试,主要针对应用程序中的最小可测试...

    iOS单元测试

    "iOS单元测试"主要关注的是对应用程序中的各个独立组件,如函数、方法或类进行测试,以验证它们按照预期工作。单元测试可以帮助开发者在早期发现并修复问题,避免在集成阶段出现难以追踪的错误。 GHUnit是专门为iOS...

    iOS测试指南完整版

    在iOS开发中,可以使用XCTest框架来编写和运行单元测试用例,确保每个模块在不同的输入和条件下都能正确运行。 接口测试:iOS应用经常需要与网络服务进行通信,接口测试用于验证应用与服务器之间数据交换的正确性。...

    IOS测试工具书

    这将帮助读者理解代码层面的测试,如单元测试和集成测试。 Appium是iOS UI自动化测试的一个重要工具,它允许开发者使用多种编程语言(如Java, Python, Ruby等)来编写测试脚本。Appium支持iOS模拟器和真机设备,...

    BaiduHiDeviOS#iOS-Tech-Weekly#iOS单元测试1

    1、最小可测单元 2、不是为了发现bug,是为了提高开发效率,为了我们的代码健康可持续发展 1、好的单元测试就是一份上好的文档,而且比文档更容易被程序员接受 2

    大话移动APP测试 Android与iOS应用测试指南

    6. **自动化测试**:介绍使用如JUnit、Espresso等工具进行单元测试和UI自动化测试的方法。 7. **兼容性套件测试(CTS)**:对于Android开发者,了解并执行CTS测试是确保应用符合Google Play Store发布标准的关键...

    软件测试-iOS自动化单元测试示例.zip

    在iOS应用开发中,自动化单元测试是不可或缺的一部分,它能够帮助开发者确保代码的质量,提高工作效率,减少因人为错误导致的问题。本示例将详细介绍如何在iOS项目中进行自动化单元测试,以及利用相关测试工具来实现...

    iOS单元测试框架KiwiforiOS.zip

    Kiwi 是 Objective-C 的单元测试框架,因其简单的接口而著名,基于 Objective-C 编写,只支持 iOS 应用 示例代码: describe(@"Team", ^{ context(@"when newly created", ^{ it(@"should have a name", ^{ ...

    swift-Spry是基于Nimble的SwiftPlaygrounds单元测试库

    `swift-Spry` 是一个专门为SwiftPlaygrounds设计的单元测试库,它基于另一个知名的测试匹配框架`Nimble`。下面我们将深入探讨`swift-Spry`及其相关知识点。 首先,我们需要了解`Nimble`。`Nimble`是由Quick项目提供...

Global site tag (gtag.js) - Google Analytics