2012-11-21 226 views
1

我有一個測試用例和一個助手類。在輔助類我想使用斷言太喜歡這裏:斷言助手類忽略

MainTests.h

#import <SenTestingKit/SenTestingKit.h> 

@interface MainTests : SenTestCase 

@end 

MainTests.m

#import "MainTests.h" 
#import "HelperClass.h" 

@implementation MainTests 

- (void)testExample { 
    HelperClass *helperClass = [[HelperClass alloc] init]; 
    [helperClass fail]; 
} 

@end 

HelperClass.h

#import <SenTestingKit/SenTestingKit.h> 

@interface HelperClass : SenTestCase 

- (void)fail; 

@end 

HelperClass.m

#import "HelperClass.h" 

@implementation HelperClass 

- (void)fail { 
    STFail(@"This should fail"); 
} 

@end 

旁註:我不得不做出的輔助類的子類從SenTestCase到能夠訪問的斷言宏。

忽略輔助類中的斷言。任何想法爲什麼?我如何在輔助類中使用斷言?

回答

5

我今天有這個相同的問題,想出了一個爲我的目的工作的黑客。捅入SenTestCase宏,我注意到他們在助手上調用[self ...],但沒有觸發斷言。所以,將源類連接到幫助程序讓它爲我工作。改變你的問題類看起來像:

MainTests.h

#import <SenTestingKit/SenTestingKit.h> 

@interface MainTests : SenTestCase 

@end 

MainTests.m

#import "MainTests.h" 
#import "HelperClass.h" 

@implementation MainTests 

- (void)testExample { 
    // Changed init call to pass self to helper 
    HelperClass *helperClass = [[HelperClass alloc] initFrom:self]; 
    [helperClass fail]; 
} 

@end 

HelperClass.h

#import <SenTestingKit/SenTestingKit.h> 

@interface HelperClass : SenTestCase 

- (id)initFrom:(SenTestCase *)elsewhere; 
- (void)fail; 

@property (nonatomic, strong) SenTestCase* from; 

@end 

HelperClass.m

#import "HelperClass.h" 

@implementation HelperClass 

@synthesize from; 

- (id)initFrom:(SenTestCase *)elsewhere 
{ 
    self = [super init]; 
    if (self) { 
     self.from = elsewhere; 
    } 
    return self; 
} 

- (void)fail { 
    STFail(@"This should fail"); 
} 

// Override failWithException: to use the source test and not self 
- (void) failWithException:(NSException *) anException { 
    [self.from failWithException:anException]; 
} 

@end 

這是完全可能的,需要更高級的功能額外的覆蓋,但是這並獲得成功對我來說。

+0

酷招。對許多助手類來說有點麻煩。你會得到一個Upvote,如果沒有更好的解決方案,我會接受這個答案。 – fabb

+1

我用失敗方法和相應的初始化程序製作了一個輔助超類。如果只需要基本斷言,則可以使用常規的'NSAssert',這很容易。雖然使用OCHamcrest似乎沒有辦法。 – fabb