Assertion in Helper Class Ignored
I have a test case and a helper class. In the helper class I want to use asserts too like here:
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
Sidenote: Я должен был сделать вспомогательный класс подклассом SenTestCase
чтобы иметь доступ к макросам утверждений.
Утверждение из вспомогательного класса игнорируется. Есть идеи почему? Как я могу использовать утверждения в вспомогательных классах?
1 ответ
У меня была такая же проблема сегодня, и я придумал хак, который работал для моих целей. Тыкать в 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
Вполне возможно, что для более продвинутой функциональности необходимы дополнительные переопределения, но это помогло мне.