一、软件测试分类
1、单元测试:测试范围小,仅仅测试一个小单元(如方法、函数不对的,对软件稳定有很大帮助)
2、集群测试:测试范围比较大,测试项目中的所有的功能
3、压力测试:模拟大批量数据/大数量的用户
单元测试的好处,即在测试文件中可以对某个正式方法进行测试,而不需要在正式文件中修改加测试,即文件和方法的测试分离。
二、单元测试学习
新创建一个项目,iOS默认会自带单元测试:
测试文件继承了测试类:XCTestCase
1.测试驱动开发
1.0测试类方法
1.1 先创建一个类,IWMathTool.h,并写一个简单的求和方法
//
// IWMathTool.h
// 0820单元测试
//
// Created by Corwien on 16-8-20.
// Copyright (c) 2016年 Corwien. All rights reserved.
// 测试驱动开发
#import <Foundation/Foundation.h>
@interface IWMathTool : NSObject
/**
* 计算两个整数的和
*/
+(int)sumWithNum1:(int)num1 num2:(int)num2;
@end
1.2 然后在测试文件中引入该类,并创建该类的测试方法:
单元测试的方法名必须以 test开头
//
// _820____Tests.m
// 0820单元测试Tests
//
// Created by kaiyi on 16-8-20.
// Copyright (c) 2016年 kaiyi. All rights reserved.
//
#import <XCTest/XCTest.h>
#import "IWMathTool.h" // 引入需要测试的类文件
@interface _820____Tests : XCTestCase
@end
@implementation _820____Tests
/**
单元测试2大颜色:
1、红色:测试失败
2、绿色:测试通过
*/
- (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];
}
/**
* 单元测试的方法名必须以 test开头
*/
-(void)testMath
{
int sum = [IWMathTool sumWithNum1:20 num2:10];
// 断言/猜测/估计
XCTAssertEqual(30, sum, @"IWMathTool方法有错");
}
- (void)testExample
{
XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__);
}
@end
1.3 点击需要测试的方法testMath前边的运行按钮,即可进行测试:
1.4 测试结果
单元测试2大颜色:
1、红色:测试失败
2、绿色:测试通过
根据测试错误分析,发现该方法还没有实现:
在IWMathTool.m中实现该方法:
#import "IWMathTool.h"
@implementation IWMathTool
+(int)sumWithNum1:(int)num1 num2:(int)num2
{
return num1 + num2;
}
@end
然后再次测试,亮了绿灯,测试通过 ^_^
单元测试可以在一个测试方法中包含多个方法进行测试:
/**
* 单元测试的方法名必须以 test开头
*/
-(void)testMath
{
int sum = [IWMathTool sumWithNum1:20 num2:10];
// 断言/猜测/估计
XCTAssertEqual(30, sum, @"IWMathTool方法有错");
// 断言测试,期望为TRUE,否则返回提示语句,isPositive是否为正数
XCTAssertTrue([IWMathTool isPositive:10], @"IWMathTool方法有错");
}
2.一个类对应一个单元测试文件
有时候一个类的方法比较多,如果都写在一个测试文件中就显得比较凌乱,所以,这里可以对多方法的类单独写一个测试单元文件。
下面就以IWUser.h类做示例:
2.1 新建一个IWUser.h类
2.2 为User类新建一个单元测试类
先选择Object-C test case Class类型的类
然后继承XCTestCase类
引入#import "IWUser.h"即可进行单元测试
// IWUserTest.m
// 0820单元测试
#import <XCTest/XCTest.h>
#import "IWUser.h"
@interface IWUserTest : XCTestCase
@end
@implementation IWUserTest
- (void)setUp
{
[super setUp];
}
- (void)tearDown
{
// Put teardown code here. This method is called after the invocation of each test method in the class.
[super tearDown];
}
- (void)testExample
{
XCTAssertNotNil([IWUser user], @"user方法返回为空");
}
@end
三、单元测试的好处
1.把测试的类代码独立到测试的文件中,业务代码和测试代码完全分离,打包发布程序测试代码也不会包含在内,发布程序不用删除测试代码。
2.方法正确与否马上就能根据颜色看到反馈,不用看打印的结果。
3.单元测试非常轻量级、快捷,只需要测试运行某个方法,而不用整个项目都Run起来,因为有时Run整个项目很耗时。
注意,单元测试只能测一些业务方法,UI是不能测试的。
如果以前没有单元测试,可能写好一个方法之后,然后再去在正式的类文件中进行赋值测试,或者等方法出错了才来修改,或者隔一段时间再次进行赋值重复测试,这样非常麻烦,所以,建议以后在项目中用单元测试。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。