码迷,mamicode.com
首页 > 移动开发 > 详细

iOS 读书笔记-单元测试XCTest

时间:2015-08-07 20:16:16      阅读:356      评论:0      收藏:0      [点我收藏+]

标签:ios   单元测试   

测试驱动下的iOS开发。这两天看了一下关于这方面的基础知识。扫一下盲。

测试驱动开发,英文Test-Driven Development 简称TDD。他是一种新型的软件开发方法。他要求在写代码之前先编写测试代码,然后之编写使测试通过的代码,通过测试来推动整个开发的进行。有助于编写简洁可用和高质量的代码。并加速开发过程。

传统开发:编写程序->设计测试用例->编写测试用例程序->单元测试->编写测试报告
测试驱动开发:设计单元测试用例->编写测试用例程序->程序编码->单元测试->编写测试报告

相比两种方法说白了就是,传统方法是写完工程代码,然后编写数据,在编写程序(或者手动)去测试,而测试驱动开发是先编写出测试数据和测试程序,然后再去编写工程代码。

据说好处大大的有。

单元测试是测试驱动的核心

主要的iOS单元测试框架有:OCUnit、GHUnit、XCTest。

OCUnit 、GHUnit都是开源的测试框架。
XCTest是Xcode默认的单元测试框架。

apple 一直致力于测试驱动开发,所以在每个工程中都默认添加了XCTest框架。

说实话以前这东西只是知道个名字,干什么的,怎么用都不知道。也没碰过。
来看下:
技术分享
工程名后面加一个Tests的文件就是。里面包含一个.m文件和一个info.plist 文件。在TARGETS中也有他的身影。

那么我们怎么来使用它呢?

我们来做这么一个页面:
技术分享
然后将Text Field控件连接viewController ,Button 的touch up Inside事件连接viewController 。

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITextField *txtRevenue;

- (IBAction)onClick:(id)sender;

@end

然后我们来编写- (IBAction)onClick:(id)sender;方法

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
}


- (IBAction)onClick:(id)sender {

    _txtRevenue.text  = @"100";
}




@end

如果点击按钮我们让Text Field控件里面显示100;就这么简单。

这是我们写的功能。

那么我们要用单元测试来测试写的是否正确。
我们点开_Tests文件里面的.m文件里面是这样的

@interface PITaxTests : XCTestCase

@end

@implementation PITaxTests

- (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.
    XCTAssert(YES, @"Pass");
}

- (void)testPerformanceExample {
    // This is an example of a performance test case.
    [self measureBlock:^{
        // Put the code you want to measure the time of here.
    }];
}
  • (void)setUp;方法是在测试开始是调用的方法,里面可初始化一些变量。
  • (void)tearDown ;方法是在测试完成之后调用的方法。
    另外两个方法是测试方法。

我们看到我们的测试类继承自XCTestCase,在运行时,XCTest框架会运行XCTestCase的子类中以test开头的测试方法(比如)testExample )。

那么我们来使用它进行测试吧。

我们就测试刚才写个功能,也就是点击界面上的计算按钮,然后再文本输入框中出现100这个功能。

看代码吧,一看就懂。

#import <UIKit/UIKit.h>
#import <XCTest/XCTest.h>
#import "ViewController.h"

@interface PITaxTests : XCTestCase

@property (nonatomic,strong) ViewController *viewController;

@end

@implementation PITaxTests

- (void)setUp {
    [super setUp];

    UIApplication *application= [UIApplication sharedApplication] ;
    UIWindow *window = [[application delegate] window];
    _viewController =(ViewController *) window.rootViewController;
}

- (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.
    XCTAssertNotNil(_viewController ,@"viewcontroller  is  nil");//这里是断言 下面说
    [_viewController onClick:nil];
    XCTAssertEqualObjects(_viewController.txtRevenue.text, @"100",@"100返回结果错误");//这里也是断言
}

@end

上面中的断言就是用来检验结果是否正确,如果错误会输出后面的提示信息。说明该测试用例错误。

只是记录一下学习单元测试,并没有按照测试驱动的方法来编写。
最后补充一下断言。
下面断言来自博客断言
二、各种断言测试:
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语言标量、结构体或联合体时使用,实际测试发现NSString也可以);

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没有发生具体异常、具体异常名称的异常时通过测试,反之不通过

推荐大牛博客:TDD的iOS开发初步以及Kiwi使用入门

版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS 读书笔记-单元测试XCTest

标签:ios   单元测试   

原文地址:http://blog.csdn.net/u010123208/article/details/47339555

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!