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

Вполне возможно, что для более продвинутой функциональности необходимы дополнительные переопределения, но это помогло мне.

Другие вопросы по тегам