测试类方法参数参数时OCMock不可预测的值

时间:2015-02-02 10:44:28

标签: ios objective-c unit-testing ocmock

尝试使用OCMock测试类方法时,我的行为确实无法预测。我遇到的问题是在尝试获取传递给类方法的参数值时。

当我在我的测试中调用mock上的方法时,一切都很完美:

- (void)test {
    id mockArchiver = OCMClassMock([TestArchiver class]);
    [[mockArchiver class] archiveRootObject:@[@"1", @"2", @"3"]];
    OCMVerify([mockArchiver archiveRootObject:[self objectChecker]]);
}

- (OCMArg *)objectChecker {

    return [OCMArg checkWithBlock:^BOOL(id value) {
        // value is equal to correct array
        return YES;
    }];
}

但是当我在我正在测试的实际类中调用该方法时问题出现了:

- (void)test {
    id mockArchiver = OCMClassMock([TestArchiver class]);
    Archive *archive = [[Archive alloc] initWithArchiver: mockArchiver];

    [archive useArchiver];

    OCMVerify([mockArchiver archiveRootObject:[self objectChecker]]);
}

- (OCMArg *)objectChecker {

    return [OCMArg checkWithBlock:^BOOL(id value) {
        // value returns very sporadic data
        return YES;
    }];
}

useArchiver非常简单......

- (void)useArchiver {

    [[self.archiver class] archiveRootObject:@[@"1", @"2", @"3"]];
}

值返回的值非常难以预测。有时它会返回正确的数组,但大部分时间都没有。它可能返回的一些例子:

value   __NSCFString *  @"archiveRootObject:"   0x00007f80725f34f0

value   __NSCFString *  @"2015-02-02 10:22:47.838"  0x00007fda585e40d0

value   __NSArrayM *    @"1 object" 0x00007faa2158aaa0:
    [0] OCMBlockConstraint *    0x7fa420632340  0x00007fa420632340

value   __NSArrayI *    @"3 objects"    0x00007fed53da1c50: // correct returned array
    [0] __NSCFConstantString *  @"1"    0x000000010b78e920
    [1] __NSCFConstantString *  @"2"    0x000000010b78e940
    [2] __NSCFConstantString *  @"3"    0x000000010b78e960

或返回OCMArg块的行上的EXC_BAD_ACCESS

有趣的是,这个问题似乎只在传入数组时发生 - 任何其他对象(如字符串,字典或自定义对象)都能正常工作。

0 个答案:

没有答案