PivotalCoreKit 0.3.5

PivotalCoreKit 0.3.5

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新发布2017年5月

Jeff HuiAndrew KitchenWiley KestnerTim Jarratt维护。



  • Pivotal Labs

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)
    • SpecHelper
      • 模拟地理编码成功或失败
  • 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]

任何人可以免费获得本软件和相关文档副本(“软件”),在使用软件时不受限制,包括但不限于使用、复制、修改、合并、发布、分发、许可和/或销售软件副本,并允许软件接收人以其认为合适的方式使用软件,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的任何副本或主要部分中。

软件按“原样”提供,没有任何形式的保证,明示的或暗示的,包括但不限于适销性、特定用途适用性和非侵权性的保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任承担责任,无论这些责任是在合同、侵权或其他法律依据中产生的,以及与软件或软件的使用或其他操作有关,无论是否产生直接、间接、偶然、特殊的或后果性的损害。