У меня есть приложение, содержащее cocoapod, содержащий движок за приложением. В этом cocoapod у меня есть общий экземпляр базового класса.`Синхронизированный` не работает в XCTest
+ (Restaurant *)current {
@synchronized(self) {
if (current == nil) {
current = [[Restaurant alloc] initWithId:0];
}
}
return current;
}
Теперь у меня есть некоторые unittests в другом коде в моем приложении. Это выглядит следующим образом:
- (void)testPOSTCodeGeneration {
[[Restaurant current] setMainTable:4];
NSLog(@"Main table in test: %d", [[Restaurant current] mainTable]);
Generator *generator = [[Generator alloc] init];
XCTAssertEqualObjects([[Restaurant current] mainTable], generator.table);
}
И в Generator.m
, я кое-что вдоль линий этого:
- (void)init {
...
self.table = [[Restaurant current] mainTable];
...
}
Странная вещь, что этот тест не пройден. mainTable
имеет значение по умолчанию 0, если не установлено другое число. Поэтому, хотя я установил его равным 4 (и Main table in test:
logs a 4), он возвращает 0. Is @synchronized
несовместим с Xcode unittests? Или кто-нибудь знает, что еще здесь происходит?