PivotalCoreKit — iOS项目的常用库代码。
变化
为什么需要PivotalCoreKit
PivotalCoreKit让您无需在每个项目中重复编写相同的样板代码,继续创建精美的应用程序。
尽管它在几个不同领域具有有用的功能,但它特别关注帮助开发者对其iOS应用程序进行测试驱动。
PivotalCoreKit能帮助做什么
亮点
- 方法交换
- 收集/映射一个NSArray
- 从其他nib文件加载基于nib的视图,保留绑定和布局约束 Wiki链接
- 使用aspect fit或aspect fill调整UIImage的大小
- 模拟UIButtons上的点击
- 模拟UIGestureRecognizer的识别
- 比较两个UIImages以检查它们是否相等
- 查询和检查当前的UIActionSheet和UIAlertView
- 模拟NSOperationQueue并按需运行其操作
- 模拟NSURLConnection以模拟网络活动和回调
- 模拟UIWebView的功能
完整列表
PivotalCoreKit沿框架拆分,为Foundation,UIKit和CoreLocation框架分别创建了单独的Xcode项目。然后每个项目又进一步划分为子部分:Core,SpecHelper和SpecHelperStubs。
Core方法旨在在任何有用之处使用,无论是规格还是主要应用程序。 SpecHelper扩展内置类,以使测试更容易且更流畅。 SpecHelperStubs模拟(并替换)类的功能,以便开发者更容易检查其状态。
以下是PivotalCoreKit功能的列表(希望尽可能详尽,但不可避免地会过时),按框架/部分划分:
- Foundation(iOS和OSX)
- Core
- 将NSString转换为SHA1哈希(作为NSData)
- 将NSData转换为十六进制字符串
- 在NSObjects上执行方法重定向(通常称为Swizzling)
- 将NSString(“Hello world I am doing great today”)转换为驼峰格式(“HelloWorldIAmDoingGreatToday”)
- 检查NSString是否为空
- 检查NSString是否为有效的电子邮件地址
- 对包括构建内百分号转义不包含的字符的NSString进行百分比转义编码。
- 通过 bloc 收集项目将 NSArray 映射到另一个 NSArray
- 将 NSDictionary 转换为查询参数字符串
- 基于 NSURLConnectionDelegate 的网络服务(PCKHTTPConnection 和 PCKHTTPInterface)
- 事件驱动的 XML 解析器(PCKParser)
- SpecHelper
- 将 NSURL 的查询参数拆分为 NSDictionary
- 伪造 NSURLConnection,防止其访问网络,并按需触发成功/失败响应
- 将 NSURLRequest 的主体作为字符串返回
- 伪造 +[NSUUID UUID] 以返回一致的结果
- 伪造 NSOperationQueue 以按需执行块
- UIKit(仅限 iOS)
- Core
- 从 UIButton 创建 UIBarButtonItem
- 从其他nib文件加载基于nib的视图,保留绑定和布局约束 Wiki链接
- 按填充比例或适应比例调整 UIImage 的大小
- 裁剪 UIImage 或添加圆角
- 通过 delta 翻译 UIView
- 使用角固定调整 UIView 的大小
- 从 NSString 和 NSAttributedString 绘制中计算高度
- SpecHelper
- 模拟点击操作
- UIButton
- UITableViewCell
- UICollectionViewCell
- UIBarButtonItem
- UITabBarController 项
- 在 UIView 上模拟点击、滑动或捏合操作(触发附加的手势识别器)
- 在 UIPageControl 上模拟点击、左右滑动
- 模拟 UISlider 的新值
- 模拟特定手势识别器的识别
- 比较 UIImages 的相等性
- 查询 UIWindow 中的第一个响应者
- SpecHelperStubs
- 查询、检查和模拟当前 UIActionSheet 上的点击
- 查询、检查和模拟当前 UIAlertView 上的点击
- 查询、检查、显示和消失 UIPopoverController
- 模拟 UIImagePickerController 的可用性状态(相机可用/不可用等)
- 检查最后一次 UIView 动画上的参数(持续时间、延迟、选项)
- 确定 UIView 是否完全显示在屏幕上(不可透明、高度、宽度或剪切)
- 伪造 UIWebView 以检查请求、模拟后退/前进状态和模拟网络加载
- CoreLocation(仅限 iOS)
- WatchKit(仅限 iOS)
- WatchKit
- 一个接口相同的替代框架,用于苹果的整个 WatchKit 框架
- 用于编写你的 WatchKit 应用程序测试(如果直接使用苹果框架类则目前不可能)
PivotalCoreKit 是以测试驱动开发的,并且每个项目都包含 Specs。
那听起来不错,给我一些例子
也许你有一堆季度报告,并想收集每个报告的第一周的所有财务报表。在链接到 Foundation+PivotalCore 之后
#import "NSArray+PivotalCore.h"
/* ... */
Week week = FirstWeek;
NSArray *firstWeekFinances = [reports collect:^id(PLReport *report) {
return [report financesForWeek:week];
}];
或者你可能正在测试点击按钮是否能够正确触发网络请求,在链接到 UIKit+PivotalSpecHelper 之后
#import "UIControl+Spec.h"
/* ... */
describe(@"when the button is tapped", ^{
beforeEach(^{
[button tap];
});
it(@"fires a network request", ^{
apiClient should have_received(@selector(requestNewestRecipes));
});
});
假设你想要检查 webview 被请求加载的 URL。在链接到 UIKit+PivotalSpecHelperStubs 之后
#import "UIWebView+Spec.h"
/* ... */
it(@"webview should load example.com", ^{
controller.webView.request.URL.absoluteString should equal(@"http://example.com");
});
如果没有 PivotalCoreKit 的 UIWebView stubs,webView 的 NSURLRequest 将为 nil,因为真实的 UIWebView 还没有开始实际发送请求。stubbed UIWebView 会立即更新请求属性。
我如何安装 PivotalCoreKit
通过 Git Submodules
- 在项目的根目录中,在 shell 中运行:
git submodule add https://github.com/pivotal/PivotalCoreKit.git Externals/PivotalCoreKit
- 将所需的 PivotalCoreKit 项目(Foundation.xcodeproj、UIKit.xcodeproj 或 CoreLocation.xcodeproj)添加到项目中适当的目标中
- 在应用程序的 Project Settings 中,在 Build Phases 下,将所需的静态库添加到 "Target Dependencies" 中
- 将相应的二进制文件添加到 Link Binary With Libraries 部分
- 如果你使用 PivotalCoreKit+Foundation,将 libxml2.2.dylib 添加到 Link Binary With Libraries 部分
- 转到 Build Settings 并更新你的 Header Search Paths 以包括包含添加的子项目的路径。使其递归。
- 例如。 "$(SRCROOT)/Externals/PivotalCoreKit/path/to/specific/projectfolder/"。
示例,将-[UIButton tap]添加到目标规格
git submodule add https://github.com/pivotal/PivotalCoreKit.git 外部/PivotalCoreKit
- 在Xcode中的Specs文件夹上右键单击 -> 添加文件
- 进入PivotalCoreKit/UIKit文件夹,选择UIKit.xcodeproj并添加。
- 在根项目文件中选择Specs目标
- 在项目设置的顶部“构建阶段”选项卡下,将UIKit+PivotalSpecHelper-StaticLib添加到“目标依赖”
- 将libUIKit+PivotalSpecHelper-StaticLib.a添加到“链接二进制库”部分。(也添加CoreGraphics.framework)。
- 切换到“构建设置”选项卡,将"$(SRCROOT)/Externals/PivotalCoreKit/UIKit/"添加到“头文件搜索路径”并使其递归
- 在所需的规格文件中添加#import "UIControl+Spec.h",并自由使用[button tap];
库文档
有关特定方法和功能的文档可以在http://cocoadocs.org/docsets/PivotalCoreKit/找到
MIT许可证
版权所有 (c) 2014 Pivotal Labs (http://pivotallabs.com/) 联系邮箱:[email protected]
任何人可以免费获得本软件和相关文档副本(“软件”),在使用软件时不受限制,包括但不限于使用、复制、修改、合并、发布、分发、许可和/或销售软件副本,并允许软件接收人以其认为合适的方式使用软件,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的任何副本或主要部分中。
软件按“原样”提供,没有任何形式的保证,明示的或暗示的,包括但不限于适销性、特定用途适用性和非侵权性的保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任承担责任,无论这些责任是在合同、侵权或其他法律依据中产生的,以及与软件或软件的使用或其他操作有关,无论是否产生直接、间接、偶然、特殊的或后果性的损害。