Вы можете добавить оператор #define, например #define INIT_FAIL_TESTING
. Затем в родительском классе, который вы хотите протестировать (при условии, что у вас есть к нему доступ), поместите следующее в начало его метода init:
#if INIT_FAIL_TESTING
return nil
#endif
или, в качестве альтернативы, в классе, который вы действительно хотите проверить, выполните следующее:
- (id)init
{
#if INIT_FAIL_TESTING
self = nil;
#else
self = [super init];
#endif
if (self == nil) {
//...
}
return self;
}
Второй вариант, вероятно, лучше, так как он не требует, чтобы у вас был доступ к родительскому классу, и вы должны быть в состоянии предположить, что все, что родитель будет делать в своем методе init, вообще не произошло. Вы просто проверяете, получили ли вы действующий родительский экземпляр, чего вы явно не получили, установив self
в nil
.