我跟着this great article進入關於核心數據的單元測試。該設置看起來很簡單,只涉及一些代碼視圖。如何告訴MagicalRecord不使用基於文件的Core Data,而是使用內存設置?
- (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
感謝您的回覆。我正在運行的測試是唯一的。我的測試目標取決於我的應用程序的目標。在我的AppdDelegate中,我設置了Core Data Stack以使用文件。難道它是在測試之前加載的,因此它被用來代替新的內存嗎?如果是的話我怎麼能避免這種情況? – Aufwind 2012-07-31 15:42:21
感謝您讓我走上正軌。我通過在方法' - (void)setUp;'''的'[MagicalRecord setupCoreDataStackWithInMemoryStore];'之前調用'[MagicalRecord cleanUp];'來解決這個謎題。我不得不刪除'[MagicalRecord setDefaultModelFromClass:[self class]];'。看到我對這個問題的編輯。 – Aufwind 2012-08-02 16:02:13
哇,這不應該是必要的...在tearDown方法中調用cleanUp應該足夠了。這很奇怪。 – casademora 2012-08-02 18:29:27