Specta 2.0.0

Specta 2.0.0

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最新发布2022年2月

Blake WattersPeter Jihoon KimRobert BöhnkeOrta Therox维护。



Specta 2.0.0

  • Peter Jihoon Kim

Specta Build Status Coverage Status

轻量级的 Objective-C 生存和行为驱动框架。

特性

  • 类似 RSpec 的 Objective-C BDD DSL
  • 快速轻松地设置
  • 基于 XCTest 构建
  • 卓越的 Xcode 集成

截图

示例

#import <Specta/Specta.h> // #import "Specta.h" if you're using libSpecta.a

SharedExamplesBegin(MySharedExamples)
// Global shared examples are shared across all spec files.

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) {
    // Locally defined shared examples can override global shared examples within its scope.
  });

  beforeAll(^{
    // This is run once and only once before all of the examples
    // in this group and before any beforeEach blocks.
  });

  beforeEach(^{
    // This is run before each example.
  });

  it(@"should do stuff", ^{
    // This is an example block. Place your assertions here.
  });

  it(@"should do some stuff asynchronously", ^{
    waitUntil(^(DoneCallback done) {
      // Async example blocks need to invoke done() callback.
      done();
    });
  });

  itShouldBehaveLike(@"a shared behavior", @{@"key" : @"obj"});

  itShouldBehaveLike(@"another shared behavior", ^{
    // Use a block that returns a dictionary if you need the context to be evaluated lazily,
    // e.g. to use an object prepared in a beforeEach block.
    return @{@"key" : @"obj"};
  });

  describe(@"Nested examples", ^{
    it(@"should do even more stuff", ^{
      // ...
    });
  });

  pending(@"pending example");

  pending(@"another pending example", ^{
    // ...
  });

  afterEach(^{
    // This is run after each example.
  });

  afterAll(^{
    // This is run once and only once after all of the examples
    // in this group and after any afterEach blocks.
  });
});

SpecEnd
  • beforeEachafterEach 也分别称为 beforeafter
  • describe 也称为 context
  • it 也称为 examplespecify
  • itShouldBehaveLike 也可称为 itBehavesLike
  • 使用 pending 或在 describecontextexampleitspecify 前面加 x 来标记示例或组为待定。
  • 使用示例中所示 使示例等待完成。需要调用 done() 回调函数来让 Specta 知道测试已完成。默认超时时间为 10.0 秒,但可以通过调用函数 setAsyncSpecTimeout(NSTimeInterval timeout) 来更改此时间。
  • (before|after)(Each|All) 也可以接受
  • 如果喜欢使用 SPEC_BEGINSPEC_END 而不是 SpecBeginSpecEnd 语法,请在导入 Specta 之前执行 #define SPT_CEDAR_SYNTAX
  • describecontextexampleitspecify 前面加 f 来关注示例或组。当规格被关注时,所有未关注的规格将被跳过。
  • 要在测试方案中将 SPECTA_REPORTER_CLASS 环境变量设置为 SPTXCTestReporter 以使用原始 XCTest 报告器。
  • 设置环境变量 SPECTA_SHUFFLE 的值为 1 以启用测试混洗(shuffle)。
  • 通过设置环境变量 SPECTA_SEED 指定测试混洗的随机种子。

标准的 XCTest 匹配器,如 XCTAssertEqualObjectsXCTAssertNil 都是有效的,但你可能还希望添加一个更友好的匹配器框架 - 在你的设置中添加 Expecta。或者,如果你真的喜欢,OCHamcrest 也是很好用的。另外,添加一个模拟框架: OCMock

状态

Specta 是一个完成的项目,目前没有计划对该项目进行 活跃 的开发,除了确保未来的 Xcode 兼容性。因此,它是一个稳定的依赖项,但是不会迁移到 Swift 世界。如果你正在寻找这样的东西,我们推荐你考虑 Quick

在命令行中运行 Specta 的测试

  • 在克隆的文件夹中运行 rake test

贡献指南

  • 请只使用空格,每次缩进两个空格。
  • 请在实例变量名称前添加单个下划线(_)。
  • 请在全球范围内定义的定制类和函数前加上SPT

安装

使用 CocoaPodsCarthage手动设置

CocoaPods

  1. 在项目的 Podfile 中添加 Specta。
target :MyApp do
# your app dependencies

  target :MyAppTests do
    inherit! :search_paths

    pod 'Specta', '~> 2.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
  1. 在项目目录中运行 pod install

Carthage

  1. 将 Specta 添加到项目的 Cartfile.private 中。

    github "specta/specta" ~> 2.0
    
  2. 在项目目录中运行 carthage update

  3. 将适当的 Specta.framework (位于 Carthage/Build/ 目录下) 拖入您的应用 Xcode 项目中,并将其添加到测试目标中。

  4. 如果您正在为 iOS 构建项目,必须向 Xcode 项目中添加一个新的 Run Script Phase 来复制框架。具体说明可参见 Carthage 入门指南

手动设置

  1. 从 GitHub 上克隆。
  2. 在项目根目录中运行 rake 以进行构建。
  3. 如果您还没有,请添加一个 "Cocoa/Cocoa Touch 单元测试 Bundle" 目标。
  4. Products 目录下的所有头文件复制并添加到 Xcode 项目中的测试目标中。
  5. 对于 OS X 项目,将 Products/osx 目录下的 Specta.framework 复制并添加到 Xcode 项目中的测试目标中。对于 iOS 项目,将 Products/ios 目录下的 Specta.framework 复制并添加到 Xcode 项目中的测试目标中。如果您愿意将 Specta 作为静态库添加到项目中,可以使用 libSpecta.a。(iOS 7 及以下版本需要这样做)
  6. 将 "Other Linker Flags" 构建设置中的 -ObjC-all_load 添加到 Xcode 项目中测试目标的构建设置。
  7. 如果您遇到与 _llvm_* 符号的链接问题,请确保您的目标 "Generate Test Coverage Files" 和 "Instrument Program Flow" 构建设置设置为 Yes

授权协议

版权所有 (c) 2012-2022 Specta 团队。本软件遵循 MIT 许可协议