我正在使用Kiwi框架通过Magical记录库测试我的代码和核心数据之间的交互。Magical record在NSManagedObject上定义了一个类别,它添加了一些很好的方法,比如MR_createInContext:(NSManagedObjectContext *)context。我正在尝试测试是否调用了该方法,以及调用了多少次。
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)失败:“”me“”应为具有新id的me对象创建新对象“”失败,无法存根-MR_createInContext:因为不存在此类方法
我怎样才能让Kiwi知道这个类别呢?
发布于 2013-05-03 05:33:58
显然这个方法是在一个类而不是NSManagedObjectContext上定义的,它应该说[Me类应该] NSManagedObject ...是我的错。
发布于 2013-05-03 05:24:44
看着你的测试的名字,我猜你的意图是验证核心数据工作,为你创建一个新的托管对象,并有一个适当的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")));
});不要担心测试类别是否工作,因为对于这个测试,它无论如何都是在隐式地测试。如果此测试失败,您很快就会知道该类别不起作用。
我的测试规则之一是“不要测试语言或框架”。当您测试某个类别是否正常工作时,您违反了这条规则,并且测试了其他人最有可能测试过的东西。
https://stackoverflow.com/questions/16347616
复制相似问题