【问题标题】:Kiwi + MagicalRecord method does not existKiwi + MagicalRecord 方法不存在
【发布时间】:2013-05-02 20:59:04
【问题描述】:

我正在使用 Kiwi 框架通过 Magical Record 库测试我的代码与 Core Data 之间的交互。神奇的记录在NSManagedObject上定义了一个category,增加了几个不错的方法,比如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"];
});

问题在于,尽管

,Kiwi 似乎没有看到该类别
#import <CoreData+MagicalRecord.h>

在测试 .m 文件中。

ME_ShouldCreateNewObjectForMeObjectWithNewId (EHMeSpecs) failed: 'ME, should create new object for me object with new id' [FAILED], cannot stub -MR_createInContext: 因为不存在这样的方法

如何让 Kiwi 了解该类别?

【问题讨论】:

    标签: ios core-data bdd magicalrecord kiwi


    【解决方案1】:

    查看您的测试名称,我猜您的意图是验证 Core Data 是否正常工作,为您创建一个新的托管对象并具有正确的 ObjectID。我认为不需要知道 Kiwi 现在应该如何拦截类别等。我会像这样简单地编写您的测试:

    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")));
    });
    

    不要担心测试类别是否有效,因为通过此测试,无论如何它都在隐式测试。如果此测试失败,您很快就会知道该类别不起作用。

    我的测试规则之一是“不要测试语言或框架”。当您测试某个类别是否有效时,您违反了此规则并测试了其他人很可能已经测试过的东西。

    【讨论】:

    • 该方法要么创建一个新的,要么返回一个获取的对象。有必要测试一下,因为我想确认第一次看到对象时,它会被创建,并且不会返回 nil。因此 MR_createInContext 将被获取。顺便说一句,我发现了错误,此方法是在 NSManagedObject 而不是上下文中定义的。
    • MR_createInContext 将被调用*
    【解决方案2】:

    显然这个方法是在 NSManagedObject 而不是 NSManagedObjectContext 上定义的,它应该说 [[Me class] should] receive... My bad.

    【讨论】:

      猜你喜欢
      • 2013-10-24
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多