我关注了this great article进入有关核心数据的单元测试。设置看起来很简单,只涉及一些 View 代码行。
- (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
问题是,例如,每次我通过调用[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
最佳答案
此处用于设置核心数据的方法不应该加载基于文件的存储。如果您使用调试器进入它,您应该看到它使用 NSInMemoryStore 类型初始化了一个持久存储协调器……最终。
我猜测为什么会发生这种情况可能是因为您没有向先前的测试用例添加清理调用,导致先前的核心数据堆栈或持久存储在该测试中停留。
这是我一直用来对核心数据进行单元测试的确切代码设置,它从未为我加载过意外的持久存储。当您调试该方法时,请确保运行此命令:
po [self persistentStores]
当您开始加载持久性存储协调器时。如果存在现有商店,这将至少验证周围是否有一些预先存在的商店。
关于objective-c - 我怎样才能告诉 MagicalRecord 不要使用基于文件的核心数据,而是使用内存设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11739360/