Auf*_*ind 9 core-data objective-c ios5 magicalrecord
我按照这篇伟大的文章进入了关于核心数据的单元测试.设置看起来很简单,只涉及一些视图行代码.
- (void)setUp;
{
[MagicalRecord setDefaultModelWithClass:[self class]];
[MagicalRecord setupCoreDataStackWithInMemoryStore];
}
- (void)tearDown;
{
[MagicalRecord cleanUp];
}
- (void)testSomeCalculationOnMyEntity;
{
NSNumber *count = [MyEntity MR_numberOfEntities];
// STAssert([testEntity customCalculation] == expectedValue, @"expected a good calculation");
}
@end
Run Code Online (Sandbox Code Playgroud)
问题是,每次我通过调用(如上所述)检查内核设置的核心数据中的实体数量[MyEntity MR_numberOfEntities],我得到的对象数量,存储在基于文件的设置中,这是一个几千个对象.这是怎么发生的?我的意思是第二行setUp表示内存中的一行,不是吗?这种情况应该返回0作为存储的对象数量.
谢谢你的任何建议!
编辑:
@casademora让我走上正轨.以下工作设置现在对我来说很好.
- (void)setUp;
{
[MagicalRecord cleanUp]; // This solved the mystery.
// I don't now why I had to remove this line, though.
// [MagicalRecord setDefaultModelWithClass:[self class]];
[MagicalRecord setupCoreDataStackWithInMemoryStore];
}
- (void)tearDown;
{
[MagicalRecord cleanUp];
}
- (void)testSomeCalculationOnMyEntity;
{
NSNumber *count = [MyEntity MR_numberOfEntities];
// STAssert([testEntity customCalculation] == expectedValue, @"expected a good calculation");
}
@end
Run Code Online (Sandbox Code Playgroud)
此处用于设置 Core Data 的方法不应加载基于文件的存储。如果您使用调试器进入它,您应该看到它最终使用 NSInMemoryStore 类型初始化持久存储协调器。
我猜测为什么会发生这种情况,可能是因为您没有向以前的测试用例添加 cleanUp 调用,导致以前的核心数据堆栈或持久存储在该测试中徘徊。
这是我一直用来对核心数据进行单元测试的确切代码设置,并且它从未为我加载意外的持久存储。当您调试该方法时,请确保运行以下命令:
po [self persistentStores]
Run Code Online (Sandbox Code Playgroud)
当您开始加载持久性存储协调器时。如果有现有商店,这至少会验证周围是否有一些现有商店。