CoreData UnitTest结果不一致

时间:2014-10-14 05:46:08

标签: ios unit-testing core-data

我已经开始测试我的NSManagedObject子类了,我遇到了一个问题,在其中一个测试用例中保存和获取结果不一致。

我的设置非常简单 - 为了测试,我有一个内存中的持久存储。我通过测试继续参考。

在测试设置上,我清除了持久存储:

- (void)setUp {
    [super setUp];

    if(!self.manager){
        self.manager = [DataManager inMemoryManager];
    }
    [self.manager.managedObjectContext reset];
}

测试用例很简单: 1.从JSON文件中读取数据,解析并配置我的对象 2.保存 3.对对象的外部ID(应该只有一个)创建获取请求

当自己运行测试用例(或只是那个测试类)时,我得到了1个结果,正如预期的那样。但是,运行所有单元测试和类,它会从fetch中生成3个结果。有时关系很好(通过),有时他们失败(没有关系)。

由于我每次在设置时重置上下文,每次测试都应该有一个空白的平板,不应该吗?

相反,我认为我从另一个测试案例中获取剩余物来污染我的数据样本,但不知道如何修复它。


如果您对获取的结果感兴趣:

<__NSArrayM 0x7f9b2842c650>(
<MyObject: 0x7f9b28435430> (entity: MyObject; id: 0x7f9b28440370 <x-coredata://9CE4448C-6595-47FC-A189-58A83F708D96/MyObject/p11> ; data: {
    externalID = 222abc;
    theChildren =     (
        "0x7f9b2843f020 <x-coredata://9CE4448C-6595-47FC-A189-58A83F708D96/ChildObject/p9>",
        "0x7f9b2843fec0 <x-coredata://9CE4448C-6595-47FC-A189-58A83F708D96/ChildObject/p12>"
    );
}),
< MyObject: 0x7f9b28440c00> (entity: MyObject; id: 0x7f9b28731890 <x-coredata://9CE4448C-6595-47FC-A189-58A83F708D96/MyObject/p5> ; data: <fault>),
< MyObject: 0x7f9b28440c60> (entity: MyObject; id: 0x7f9b28729490 <x-coredata://9CE4448C-6595-47FC-A189-58A83F708D96/MyObject/p3> ; data: <fault>)
)

1 个答案:

答案 0 :(得分:0)

setUp每个测试套件只调用一次,您需要在每次测试前调用reset。我建议切换到Specta并使用它beforeEach重置。 (example - 虽然没有管理对象竞赛)