如何存根猕猴桃 2 具有只读属性Objective-C

标签: ios Objective-C
发布时间: 2016/10/4 2:35:07
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

寻找有关访问只读属性与猕猴桃的小帮助。 总之,我想如果 _myReadOnlyDict 获取初始化或不进行测试。 问题是, myReadOnlyDict 仍然总是的空 (未包含任何内容),尽管在 beforeEach 块,它嘲笑和添加到它的价值。

    // All these return 0
    ad.myReadOnlyDict.count;
    [[ad myReadOnlyDict] allKeys].count;
    [ad myReadOnlyDict].count;

我丢失在这里吗?

任何帮助感谢 !

请参见下面的代码︰

在 AppDelegate.h 有产权。

@property (nonatomic, readonly) NSDictionary * myReadOnlyDict;

在 AppDelegate.m,我有一种从 AppDelegate 的 didFinishLaunchingWithOptions 方法调用的方法。

- (void)initConfig
{
    _myReadOnlyDict = [NSJSONSerialization JSONObjectWithData:[self jsonData] options:nil error:nil];
}

我有一个猕猴桃测试设置

describe(@"App Delegate", ^{

    __block AppDelegate *ad;

    beforeEach(^{
        ad = [[AppDelegate alloc] init];

        NSMutableDictionary * mockedDict = [NSJSONSerialization nullMock];

        mockedDict[@"my_data"] = @"my_value";

        [ad stub:@selector(myReadOnlyDict) andReturn:mockedDict];
    });

    afterEach(^{
        ad = nil;
    });

    context(@"when smth happens", ^{
        it(@"should do smth else", ^{
            [[ad should] receive:@selector(initConfig)];

            // These three lines fail
            [[theValue([ad myReadOnlyDict].count) shouldNot] equal:theValue(0)];
            [[theValue(ad.myReadOnlyDict.count) shouldNot] equal:theValue(0)];
            [[theValue([[ad myReadOnlyDict] allKeys].count) shouldNot] equal:theValue(0)];

            [ad initConfig];
        });
    });
});

解决方法 1:

你的问题造成这一事实, [NSJSONSerialization nullMock] 返回一个空的模拟,是一个对象,并没有为任何调用的方法,并返回 nil 0 到必须返回一些东西的任何方法。

这应该工作︰

NSMutableDictionary * mockedDict = [@{@"my_data": @"my_value"} mutableCopy];
[ad stub:@selector(myReadOnlyDict) andReturn:mockedDict];
赞助商