Юнит тесты реально спасают, я вот написал тест:
- (void)testDeviceTypeItemInit
{
NSDictionary *dic = @{@"name":@"wifi_relay",
@"needsControlCenter":@(YES),
@"needsControlDevice":@(NO)};
REDeviceTypeItem *deviceTypeItem = [[REDeviceTypeItem alloc] initWithDic:dic];
XCTAssertNotNil(deviceTypeItem);
XCTAssert([deviceTypeItem.name isEqualToString:@"wifi_relay"]);
XCTAssert([deviceTypeItem.localizedName isEqualToString:@"Умное Wi-Fi реле"]);
XCTAssertTrue(deviceTypeItem.needsControlCenter);
XCTAssertFalse(deviceTypeItem.needsControlDevice);
}
и он не прошел. Оказалось, что я забыл проставить boolValue тут:
- (instancetype)initWithDic:(NSDictionary *)dic
{
self = [super init];
if (self)
{
_name = dic[@"name"];
_localizedName = NSLocalizedString(_name, nil);
_needsControlCenter = [dic[@"needsControlCenter"] boolValue];
_needsControlDevice = [dic[@"needsControlDevice"] boolValue];
}
return self;
}
Что интересно, без boolValue никаких warnings и тем более ошибок сборки.