2013-05-02 73 views
0

我使用Kiwi框架通過Magical Record庫來測試我的代碼和Core Data之間的交互。神奇記錄在NSManagedObject上定義了一個類別,它添加了一些不錯的方法,比如MR_createInContext:(NSManagedObjectContext *)上下文。我試圖測試是否這個方法被調用,並且被調用了多少次。Kiwi + MagicalRecord方法不存在

it(@"should create new object for me object with new id", ^{ 
    [[[NSManagedObjectContext MR_contextForCurrentThread] should] receive:@selector(MR_createInContext:)]; 
    Me *me = [Me meWithID:@"12345" inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; 
    [me shouldNotBeNil]; 
    [[me.idNumber should] equal:@"12345"]; 
}); 

的問題是,獼猴桃似乎並沒有看到該類別儘管

#import <CoreData+MagicalRecord.h> 
測試.m文件

ME_ShouldCreateNewObjectForMeObjectWithNewId(EHMeSpecs)失敗,「我,我,應該創建新的對象,我用新的ID對象」 [失敗],不能存根-MR_createInContext:因爲沒有這樣的方法存在

我怎樣才能使獼猴桃知道的類別?

回答

0

顯然這個方法是在NSManagedObject上定義的,而不是NSManagedObjectContext,它應該說[[Me class]應該]接收...我的不好。

0

看着你的測試的名字,我猜你的意圖是驗證Core Data的工作原理,爲你創建一個新的託管對象並擁有一個合適的ObjectID。我不認爲有必要知道獼猴桃現在應該如何攔截這個類別。我只想寫你的測試,像這樣:

it(@"should create a new object", ^{ 

    NSManagedObjectContext *testContext = [NSManagedObjectContext MR_context]; 
    id myObject = [MyEntity createWithStuff:@{...} inContext:testContext]; 

    assertThat(myObject, isNot(nil)); 
    assertThat([myObject someAttrbiute], is(equalTo(@"some value"))); 
}); 

不要擔心,如果測試類的作品,因爲這個測試,它的測試隱含無論如何都。如果此測試中斷,您將很快知道該類別無法正常工作。

我的一個測試規則是「不要測試語言或框架」。當你測試一個類別是否有效時,你違反了這個規則並且測試了其他人最有可能測試過的東西。

+0

該方法創建一個新的或返回一個提取的對象。有必要測試一下,因爲我想確認第一次看到該對象時,它將被創建,並且nil不會被返回。因此MR_createInContext將被提取。順便說一句,我發現錯誤,這種方法是在NSManagedObject而不是上下文上定義的。 – foFox 2013-05-02 21:29:06

+0

MR_createInContext將被調用* – foFox 2013-05-02 21:35:49