我试图通过将实体属性设置为非可选来将其设置为不为空。
但是当我在测试用例中赋值nil属性时,没有报错也没有异常,测试成功了。顺便说一句,我如何确保此属性在单元测试中不是可选的?
Baby *baby = [self.babyModel createWithName:nil];
XCTAssertNil(baby.name);
当我在 sqlite 中检查表的架构时,它没有将其设置为不为空。这是否意味着此约束由核心数据堆栈而不是 sqlite 保证?
最佳答案
当您将核心数据实体属性设置为非可选时,您在尝试保存上下文时将会崩溃。在保存之前,您可以拥有具有 nil 非可选属性的对象,此时它会打破数据库的约束。
如果您取出 XCTAssertNil 并通过保存用于创建婴儿的上下文来替换它,您的测试应该会失败。
无论如何,我不确定您想用上述案例测试什么。您是否在 BabyModel 上测试 createWithName: 函数?您是否正在尝试测试 createWithName: 不允许创建没有名称的 Baby 对象?如果您回答您到底要测试什么代码路径,我可以帮助您编写更合适的测试。
关于ios - 实体的核心数据可选属性如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32366392/