OCDSpec2 1.7.0

OCDSpec2 1.7.0

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最后发布2014年12月

未归属维护。



OCDSpec2 1.7.0

  • paytonrules, ericmeyer, marosluuce和sdegutis

OCDSpec2 1.5.1

这是一个为Mac或iOS项目开发的测试库,为像我们这样的强迫症。

安装和设置

OCDSpec现在在CocoaPods上!这使得开始变得更为简单。

安装项目模板(一次性安装)

开始的最简单方法是使用提供的模板创建一个单独的specs目标。这需要一个一次性安装脚本。只需运行

curl -L https://raw.github.com/OCDSpec/OCDSpec2/master/install_templates.sh | bash

此脚本不需要管理员权限,如果它请求这些权限,那么有些事情是错误的。

创建spec目标

OCDSpec提供了项目模板,适用于iOS和Mac,你可以使用相应的测试运行器将目标添加到你的项目中。创建一个新的目标,并选择适用于你的平台的OCDSpec测试运行器。

你可以为这个目标命名任何你喜欢的名字,我通常将其命名为Specs。

Podfile

最后将其添加到Podfile文件中

target :test do
  link_with '<Your Spec Target Name>'

  pod 'OCDSpec2'
end

完成这些后,运行pod install命令。现在当你构建spec目标时,它将自动运行测试,如果有测试失败,则构建失败。我喜欢使我的测试目标成为主要应用程序目标的一个依赖项,以便当测试失败时构建失败。

创建你的第一个spec

要创建一个新的spec,请使用新的Spec文件模板,并将其添加到你的spec目标中

这将创建一个包含一个失败测试的文件。

运行spec

  • 选择spec方案
  • 构建(Cmd+B)

如果你将spec目标设置为主要目标的依赖项,你可以只构建主要目标而不切换方案。

Xcode自动完成

安装完podfile后,如果你愿意,可以安装Xcode自动完成。这只需要在你的机器上运行一次,尽管你可能想要在更新OCDSpec时重新运行它。只需运行

curl https://raw.github.com/OCDSpec/OCDSpec2/master/install_autocompletions.sh | bash

特性

  • 描述和示例块
    • 描述块可以进行嵌套
    • 任何描述块都可以有一个“before-each”和“after-each”块
    • 使用OCDSpec2Context创建的上下文是一个顶层描述块
  • Xcode集成
    • 自动完成,只需键入"Desc"、"It"、"ExpectObj"、"ExpectInt"等。
    • 用于轻松创建测试目标和规范文件的模板
    • 突出显示任何失败的期望行
  • 捕获异常
    • 这使得它与OCMock兼容
  • 挂起

示例规范

#import <OCDSpec2/OCDSpec2.h>

#import "Widget.h"

OCDSpec2Context(WidgetSpec) {

  __block Widget* widget;

  BeforeEach(^{
    widget = [[[Widget alloc] init] autorelease];
  });

  Describe(@"-gadgets", ^{

    It(@"is a non-empty array", ^{
      [ExpectObj(widget.gadgets) toExist];
      [ExpectInt([widget.gadgets count]) toBe: 3];
    });

    It(@"contains gadget instances", ^{
      [ExpectObj([widget.gadgets objectAtIndex:0]) toBeKindOfClass: [Gadget self]];
    });

    It(@"makes lots of money", ^{
      Pending();
    });

  });

}

断言/期望方法

  • ExpectObj(id)
    • toBe:(id)other
    • toBeEqualTo:(id)other
    • toExist
    • toBeNil
    • toBeMemberOfClass:(Class)cls
    • toBeKindOfClass:(Class)cls
  • ExpectInt(long long)
    • toBe:(long long)other
    • toBeTrue
    • toBeFalse
    • toNotBeFalse
  • ExpectFloat(double)
    • toBe:(double)other withPrecision:(double)precision
  • ExpectStr(NSString*)
    • toContain:(NSString*)substring
    • toStartWith:(NSString*)substring
  • ExpectArray(NSArray*)
    • toContain:(id)obj
  • ExpectBlock(void(^)(void))
    • toNotRaiseException
  • Pending()
  • PendingStr(NSString*)

在测试之前运行代码

要在整个测试套件之前运行一些代码,创建一个符合OCDSPrelude协议的类,只需要一个-(void)run方法。以下是一个示例

#import <UIKit/UIKit.h>
#import <objc/runtime.h>

#import <OCDSpec2/OCDSpec2.h>

NSString* StubbedNibName(void) {
  return nil;
}

@interface ViewPrelude : NSObject<OCDSPrelude>
@end

@implementation ViewPrelude

- (void) run {
  method_setImplementation(class_getInstanceMethod([UIViewController self], @selector(nibName)),
                           (IMP)StubbedNibName);
}

@end

变更日志

  • 1.5.1
    • CocoaPods
  • 1.5
    • 修复了最新iOS更改的退出代码
  • 1.4
    • 添加了Pending()和PendingStr(),它们产生警告而不是错误
  • 1.3
    • 添加了用于检测异常的块期望
    • 现在示例可以捕获异常并自动报告
    • 更改了语法,以避免与OCMock冲突,但不是向后兼容
  • 1.2
    • BeforeEach、AfterEach和示例块现在是上下文顶级中的描述块,无需describe
    • 现在可以嵌套描述块
    • 在嵌套时,BeforeEach和AfterEach按深度顺序直观执行
  • 1.1.1
    • 添加了布尔代码片段
  • 1.1
    • 添加了代码片段
  • 1.0
    • 完成所有工作
    • 编写所有代码

在OCDSpec2上工作

  • 构建OCDSpec2方案将运行所有单元测试和接受测试
  • 确保测试您添加的每一项
  • 让您的测试比我的更好

致谢

  • 受到Eric Smith的OCDSpec的启发。

许可证

版权所有 (c) 2013 OCDSpec团队

本许可证无偿授予任何获得本软件及其相关文档文件(统称为“软件”)副本的人士,使其在不受任何限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或转售软件复制品,并允许向软件提供方接收本软件的人士进行上述操作,但必须遵守以下条件

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

本软件按“原样”提供,不提供任何形式的保证,包括但不限于适用性、特定目的适用性和非侵权性的保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任(无论源于合同、侵权或任何其他原因,以及软件或软件的使用或其他相关操作产生的、从中产生或与软件相关的索赔或损害)负责。