ios – 新西兰规格的全球帮手

我在我的规范文件中的BEGIN_SPEC END_SPEC块中定义了一些辅助块,我经常重复使用.例如.断言某个对话框出现:

void (^expectOkAlert) (NSString *, NSString *) = ^void(NSString *expectedTitle, NSString *expectedMessage) {
    UIAlertView *alertView = [UIAlertView mock];
    [UIAlertView stub:@selector(alloc) andReturn:alertView];
    [[alertView should] receive:@selector(initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:)
                      andReturn:alertView
                  withArguments:expectedTitle,expectedMessage,any(),@"OK",any()];
    [[alertView should] receive:@selector(show)];
};

我想将这个块重用于其他几个spec文件.这在某种程度上是可能的,就像我们通常在Ruby世界中使用spec helper和rspec一样吗?

你如何管理全球规格助手?

最佳答案 您可以

>将expectOkAlert声明为全局变量,在其他单元测试中包含的公共头中

extern void (^expectOkAlert) (NSString *, NSString *);

>或在KWSpec类别中声明expectOkAlert,您仍然需要一个包含在您需要使用它的单元测试中的公共头

@implementation KWSpec(Additions)
+ (void)expectOkAlertWithTitle:(NSString*)title andMessage:(NSString*)message;
@end

你像这样使用它:

it(@"expects the alert", %{
    [self expectOkAlertWithTitle:@"a title" andMessage:@"a message"];  
});

>或创建自定义匹配器并使用它来声明:

@interface MyAlertMatcher: KWMatcher
- (void)showOKAlertWithTitle:(NSString*)title andMessage:(NSString*)message;
@end

并在你的测试中使用它,如下所示:

it(@"expects the alert", %{
    [[UIAlertView should] showOkAlertWithTitle:@"a title" andMessage:@"a message"];  
});

所有方法都要求您在单元测试目标可用标头中声明帮助程序,否则您将收到编译警告/错误.

点赞