Core Data的可选属性如何工作?

时间:2015-09-03 03:18:30

标签: ios sqlite cocoa-touch core-data

我正在尝试通过将实体属性设置为非可选来将其设置为非空。

但是当我在测试用例中分配属性nil时,它报告没有错误或异常并且测试成功。顺便说一句,如何通过单元测试确保此属性不可选?

Baby *baby = [self.babyModel createWithName:nil];
XCTAssertNil(baby.name);

当我在sqlite中检查表的模式时,它不会将其设置为null。这是否意味着核心数据堆栈而不是sqlite可以保证这种约束?

1 个答案:

答案 0 :(得分:1)

如果将核心数据实体属性设置为非可选,则在尝试保存上下文时会出现崩溃。在保存之前,您可以使用nil非可选属性对象,此时它正在制动数据库的约束。

如果您取出XCTAssertNil并通过保存您曾经创建过宝贝的上下文来替换它,那么您的测试应该会失败。

无论哪种方式,我都不确定你要用上面的案例测试什么。你在babyModel上测试createWithName:函数吗?您是否尝试测试createWithName:不允许创建没有名称的Baby对象?如果您回答了您正在尝试测试的代码路径,我可以帮助您编写更合适的测试。