【问题标题】:CoreData UnitTest inconsistent resultsCoreData UnitTest 结果不一致
【发布时间】:2014-12-08 19:28:31
【问题描述】:

我已经开始测试我的 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>)
)

【问题讨论】:

    标签: ios unit-testing core-data


    【解决方案1】:

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

    【讨论】:

    • 我以为可能是这样,但找到了这个解释。 stackoverflow.com/a/21040654/694080
    • 即使在设置和拆卸时运行清除,我仍然遇到问题。我还尝试在每个测试用例之前和之后进行清除,但没有修复。如果我注释掉使用[context save:&amp;error] 的其他测试(在其他一些测试类中),它似乎没问题。似乎有帮助的是让我的 inMemoryManager 不是单例,所以每个测试都有自己的实例(无论好坏)。听起来不太好,但这样的情况可以接受吗?
    • 一开始为什么是单例?
    猜你喜欢
    • 2018-10-31
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    相关资源
    最近更新 更多