Specta
Objective-C 的轻量级 TDD/BDD 框架。
特性
- Objective-C RSpec-like BDD DSL
- 快速简便的设置
- 建立在 XCTest 之上
- 出色的 Xcode 集成
屏幕截图
(恕删略)
实例
#import <Specta/Specta.h> // #import "Specta.h" 如果您使用 libSpecta.a SharedExamplesBegin(MySharedExamples) // 全局共享示例在所有spec文件中共享。 sharedExamplesFor(@"foo", ^(NSDictionary *data) { __block id bar = nil; beforeEach(^{ bar = data[@"bar"]; }); it(@"should not be nil", ^{ XCTAssertNotNil(bar); }); }); SharedExamplesEnd SpecBegin(Thing) describe(@"Thing", ^{ sharedExamplesFor(@"another shared behavior", ^(NSDictionary *data) { // 本地定义的共享示例可以在其范围内覆盖全局共享示例。 }); beforeAll(^{ // 在本组所有示例之前以及在每个 beforeEach 块之前运行一次, // 且仅运行一次。 }); beforeEach(^{ // 这是在每个示例之前运行的。 }); it(@"should do stuff", ^{ // 这是一个示例块。 将断言放在这里。 }); it(@"should do some stuff asynchronously", ^{ waitUntil(^(DoneCallback done) { // 异步示例块需要调用 done() 回调。 done(); }); }); itShouldBehaveLike(@"a shared behavior", @{@"key" : @"obj"}); itShouldBehaveLike(@"another shared behavior", ^{ // 如果需要延迟计算上下文,可以使用返回字典的块 // 例如:使用在 beforeEach 块中准备的对象。 return @{@"key" : @"obj"}; }); describe(@"Nested examples", ^{ it(@"should do even more stuff", ^{ // ... }); }); pending(@"pending example"); pending(@"another pending example", ^{ // ... }); afterEach(^{ // 这是在每个示例之后运行的。 }); afterAll(^{ // 在本组的所有示例之后,以及在每个 afterEach 块之后, // 只运行一次。 }); }); SpecEnd
beforeEach
和afterEach
也分别作为before
和after
别名。describe
也作为context
别名。it
也别名为example
和specify
.itShouldBehaveLike
也别名为itBehavesLike
.- 使用
pending
或在前面加上x
来describe
,context
,example
,it
, 并specify
将示例或组标记为挂起。 - 使用
^(DoneCallback done)
,如上例所示,使示例等待完成。需要调用done()
回调,让Specta知道你的测试已经完成。 默认超时为10.0秒,但可以通过调用该函数setAsyncSpecTimeout(NSTimeInterval timeout)
来更改。 (before|after)(Each/All)
也接受^(DoneCallback done)
。- 如果您希望编写
SPEC_BEGIN
和SPEC_END
而不是SpecBegin
和SpecEnd
,请在导入 Specta 之前#define SPT_CEDAR_SYNTAX
。 - 在您的
describe
,context
,example
,it
和specify
之前添加f
以便将重点放在示例或组上。当规格集中时,所有未集中的规格将被跳过。 - 要使用原始 XCTest 报告器,请在测试方案中将名为
SPECTA_REPORTER_CLASS
的环境变量设置为SPTXCTestReporter
。 - 使用值
1
设置环境变量SPECTA_SHUFFLE
以启用测试改组。 - 设置环境变量
SPECTA_SEED
以指定用于测试改组的随机种子。
安装
使用 CocoaPods, Carthage or Set up manually
CocoaPods
- 将 Specta 添加到项目的
Podfile
:
target :MyApp do # your app dependencies target :MyAppTests do inherit! :search_paths pod 'Specta', '~> 1.0' # pod 'Expecta', '~> 1.0' # expecta matchers # pod 'OCMock', '~> 2.2' # OCMock # pod 'OCHamcrest', '~> 3.0' # hamcrest matchers # pod 'OCMockito', '~> 1.0' # OCMock # pod 'LRMocky', '~> 0.9' # LRMocky end end
- 在项目目录中运行
pod install
。
Carthage
-
将 Specta 添加到项目的 Cartfile.private 中
github "specta/specta" ~> 1.0
- 在项目目录中运行 carthage update
- 将适合您平台的 Specta.framework (位于 Carthage/Build/) 拖到应用程序的Xcode 项目中,并将其添加到测试目标中。
- 如果要为 iOS 构建,则必须添加新的“运行脚本阶段”以复制框架。这些说明可以可以在 Carthage 入门说明 中找到。
手动设置
- 从 Github 克隆。
- 在项目根目录中运行 rake 来构建。
- 添加“Cocoa/Cocoa Touch Unit Testing Bundle”目标(如果您还没有)。
- 将 Products 文件夹中的所有头文件复制并添加到 Xcode 项目中的 Test 目标。
- 对于 OS X 项目,将 Products/osx 文件夹中的 Specta.framework 复制并添加到 Xcode 项目中的测试目标。 对于 iOS 项目,将 Products/ios 文件夹中的Specta.framework 复制并添加到 Xcode 项目中的测试目标。 如果您希望将其添加为项目的静态库,也可以使用 libSpecta.a。 (iOS 7 及以下版本需要此功能)
- 将 -ObjC 和 -all_load 添加到 Xcode 项目中测试目标的“Other Linker Flags”构建设置中。
- 如果遇到与 _llvm_ * 符号的链接问题,请确保目标的"Generate Test Coverage Files"(“生成测试覆盖率文件”)和"Instrument Program Flow"(“仪器程序流”)构建设置设置为“是”。
许可
版权所有 (c) 2012-2016 Specta Team。本软件是 MIT License 授权下使用的。
(First version: vz 2019/07/30)