2013-05-02 1 views
0

Я использую инфраструктуру Kiwi для проверки взаимодействия между моим кодом и основными данными через библиотеку Magical Record. Магическая запись определяет категорию в 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) не удалось: «Я, должен создать новый объект для меня объект с новым идентификатором» [FAILED], не может окурок -MR_createInContext: потому что нет такого метода не существует

Как я могу сделать Киви осведомлены о категория?

ответ

0

Очевидно, что этот метод определен в NSManagedObject, а не в NSManagedObjectContext, он должен сказать, [[Me class] должен] получать ... Мой плохой.

0

Рассматривая имя вашего теста, я предполагаю, что вы намерены проверить работу основных данных, создает для вас новый управляемый объект и имеет соответствующий 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 будет извлечен. BTW Я нашел ошибку, этот метод определен в NSManagedObject, а не в контексте. – foFox

+0

MR_createInContext будет называться * – foFox