这是一个为Mac或iOS项目开发的测试库,为像我们这样的强迫症。
OCDSpec现在在CocoaPods上!这使得开始变得更为简单。
开始的最简单方法是使用提供的模板创建一个单独的specs目标。这需要一个一次性安装脚本。只需运行
curl -L https://raw.github.com/OCDSpec/OCDSpec2/master/install_templates.sh | bash
此脚本不需要管理员权限,如果它请求这些权限,那么有些事情是错误的。
OCDSpec提供了项目模板,适用于iOS和Mac,你可以使用相应的测试运行器将目标添加到你的项目中。创建一个新的目标,并选择适用于你的平台的OCDSpec测试运行器。
你可以为这个目标命名任何你喜欢的名字,我通常将其命名为Specs。
最后将其添加到Podfile文件中
target :test do
link_with '<Your Spec Target Name>'
pod 'OCDSpec2'
end
完成这些后,运行pod install命令。现在当你构建spec目标时,它将自动运行测试,如果有测试失败,则构建失败。我喜欢使我的测试目标成为主要应用程序目标的一个依赖项,以便当测试失败时构建失败。
要创建一个新的spec,请使用新的Spec文件模板,并将其添加到你的spec目标中
这将创建一个包含一个失败测试的文件。
如果你将spec目标设置为主要目标的依赖项,你可以只构建主要目标而不切换方案。
安装完podfile后,如果你愿意,可以安装Xcode自动完成。这只需要在你的机器上运行一次,尽管你可能想要在更新OCDSpec时重新运行它。只需运行
curl https://raw.github.com/OCDSpec/OCDSpec2/master/install_autocompletions.sh | bash
#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
版权所有 (c) 2013 OCDSpec团队
本许可证无偿授予任何获得本软件及其相关文档文件(统称为“软件”)副本的人士,使其在不受任何限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或转售软件复制品,并允许向软件提供方接收本软件的人士进行上述操作,但必须遵守以下条件
上述版权声明和本许可声明必须包括在软件的副本或主要部分的任何副本中。
本软件按“原样”提供,不提供任何形式的保证,包括但不限于适用性、特定目的适用性和非侵权性的保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任(无论源于合同、侵权或任何其他原因,以及软件或软件的使用或其他相关操作产生的、从中产生或与软件相关的索赔或损害)负责。