IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> iOS_单元测试四之OCHamcrest 使用 -> 正文阅读

[开发测试]iOS_单元测试四之OCHamcrest 使用

OCHamcrest

OCHamcrestOC的断言框架,提供更友好的断言接口。
OCHamcrest的断言方法都是以assertThat为前缀的。

一、Object

MOStudent *stu = [[MOStudent alloc] init];
stu.name = @"momo";
MOStudent *stu2 = nil;

assertThat(stu, conformsTo(@protocol(NSCoding)));   // 断言遵循某协议
assertThat(stu, equalTo(stu));      // 断言相等(由`isEqual`决定)
assertThat(stu, hasDescription(startsWith(@"<MOStudent:")));      // 断言描述方法的返回值
assertThat(stu, hasProperty(@"name", @"momo")); // 断言对象属性
assertThat(stu, instanceOf([NSObject class]));  // 断言对象类型,类似`isKindOf`
assertThat(stu, isA([MOStudent class]));        // 断言对象的精确类型,类似`isMemberOf`

assertThat(stu2, nilValue());       // 断言为空
assertThat(stu, notNilValue());     // 断言不为空

assertThat(stu, sameInstance(stu)); // 断言相等(由`对象内存地址`决定)

二、Number

// BOOL
BOOL value1 = YES;
BOOL value2 = NO;
assertThatBool(value1, isTrue());
assertThatBool(value2, isFalse());

// int、float
int num1 = 5;
float num2 = 2.5;
assertThatInt(num1, equalToInt(5));         // 断言`int`相等
assertThatFloat(num2, equalToFloat(2.5));   // 断言`float`相等

// NSNumber
NSNumber *num3 = @(3.14);
assertThat(num3, closeTo(3.0f, 0.5));       // 断言`NSNumber`接近某个值,波动范围在`0.5`之内
assertThat(num3, lessThan(@(4)));           // 断言`NSNumber`小于4
assertThat(num3, lessThanOrEqualTo(@(4)));  // 断言`NSNumber`小于/等于4
assertThat(num3, greaterThan(@(3)));            // 断言`NSNumber`大于3
assertThat(num3, greaterThanOrEqualTo(@(3)));   // 断言`NSNumber`大于/等于3

三、String

NSString *str = @"Objective-C";

assertThat(str, equalTo(@"Objective-C"));   // 断言字符串相等
assertThat(str, containsSubstring(@"tive"));    // 断言字符串是否包含`tive`
assertThat(str, startsWith(@"Obj"));            // 断言字符串是否以`Obj`开头
assertThat(str, endsWith(@"-C"));               // 断言字符串是否以`-C`结尾
assertThat(str, equalToIgnoringCase(@"objective-c"));  // 断言字符串是否相等,忽略大小写

四、Logical

NSString *str = @"Objective-C";
assertThat(str, allOf(startsWith(@"Objective"), endsWith(@"-C"), nil));    // 断言满足所有
assertThat(str, anyOf(startsWith(@"Objective"), endsWith(@"-S"), nil));    // 断言满足任意一个
assertThat(str, isNot(@"Swift"));           // 断言不相等
assertThat(str, isNot(endsWith(@"-S")));    // 断言不以`-S`结尾

五、Collection

NSArray *arr = [NSArray array];
assertThat(arr, isEmpty());     // 断言为空

arr = @[@"a", @"b", @"c"];
assertThat(arr, contains(@"a", @"b", @"c", nil));   // 断言包含(顺序和数量必须都相同)
assertThat(arr, containsInAnyOrder(@"b", @"a", @"c", nil));   // 断言乱序包含(数量必须都相同)
assertThat(arr, everyItem(instanceOf([NSString class])));    // 断言每个item都满足某个条件

// 断言几个数量满足某个条件
assertThat(arr, hasCount(greaterThan(@(2))));   // 断言数量大于2
assertThat(arr, hasCountOf(3));     // 断言数量等于3

// 断言包含c
assertThat(arr, hasItem(@"c"));
assertThat(@"c", isIn(arr));

// 断言item满足某些条件: (出现的matcher,有一个item满足) (以下两种写法效果一样)
assertThat(arr, hasItems(is(@"c"), equalToIgnoringCase(@"A"), @"b", nil));
assertThat(arr, hasItemsIn(@[is(@"c"), equalToIgnoringCase(@"A"), @"b"]));

// 断言item满足某些条件: (每个item,满足任意一个matcher) (以下两种写法效果一样)
assertThat(arr, onlyContains(startsWith(@"a"), nil));   // 断言失败,只有a满足了,其他的item都没满足
assertThat(arr, onlyContains(instanceOf([NSString class]), nil));   // 断言成功,所有item都能满足
assertThat(arr, onlyContainsIn(@[instanceOf([NSString class])]));

NSDictionary *dic = @{@"key1": @"value1", @"key2": @"value2"};
assertThat(dic, isNot(isEmpty()));  // 断言非空
assertThat(dic, isNot(hasKey(@"key3")));    // 断言包含某个key
assertThat(dic, hasCountOf(2));     // 断言数量
assertThat(dic, hasKey(@"key1"));   // 断言包含某个key
assertThat(dic, hasValue(@"value1"));   // 断言包含某个value

// 断言键值对
assertThat(dic, hasEntry(@"key1", @"value1"));  // 断言包含某个键值对
assertThat(dic, hasEntries(@"key1", @"value1", @"key2", @"value2", nil));    // 断言包含多个键值对
assertThat(dic, hasEntriesIn(@{@"key1": @"value1", @"key2": @"value2"}));    // 断言包含多个键值对

六、Decorator

// is是一个语法糖
// 用来装饰另一个matcher, 或提供常用的 is(equalTo(x)) 的快捷方式

// 如果()里是matcher,则跟没写is的效果是一样的
int num1 = 5;
assertThatInt(num1, equalToInt(5));
assertThatInt(num1, is(equalToInt(5)));

// 如果()里不是matcher,则将其包装在equalTo matcher中(由`isEqual`决定),下列语法是等效的
NSString *cheese = @"cheese";
NSString *smelly = @"cheese";
assertThat(cheese, equalTo(smelly));
assertThat(cheese, is(equalTo(smelly)));
assertThat(cheese, is(smelly));

参考:GithubDocument

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-15 15:53:24  更:2021-08-15 15:54:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 21:17:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码