如何获得使用模拟和期望的嵌套Objective-C异步方法在测试下执行?

问题描述

这是我的考试

- (void)test_IsOverLimit {

    id myCoordinator = OCMPartialMock([[MyCoordinator alloc] init]);
      
    XCTestExpectation *expectationLimitResult = [self expectationWithDescription:@"my limit result"];
    
    [myCoordinator getLimitResultWithCompletion:^(LimitResult *limitResult) {
        
        //Assertions.
        XCTAssertTrue(limitResult.isOverLimit);
        
        //complete test.
        [expectationLimitResult fulfill];
    }];

    [self waitForExpectations:@[expectationLimitResult] timeout:10];
}

问题是 getLimitResultWithCompletion 调用了另一个异步方法 getlimitRecordWithCompletion ,如下所示:

- (void)getLimitResultWithCompletion:(void(^)(LimitResult *))completion {
    [[Context someContext] getlimitRecordWithCompletion:^(LimitRecord *result) {
        LimitResult *limitResult = [[LimitResult alloc] init];
        LimitRecord *limitRecord = result;
        BOOL isOverLimit = limitRecord.someValue > someOtherConstantValue;
        
        if (isOverLimit) {
            limitResult.message = @"You have exceeded some pre-determined limit";
            limitResult.isOverLimit = YES;
        }
        else {
            limitResult.message = nil;
            limitResult.isOverLimit = NO;
        }
        completion(limitResult);
    }];
}

我调试测试时, getlimitRecordWithCompletion 中的代码未执行。调试器只是跳过它。当然,测试失败。我对期望和测试异步代码不是很熟悉。我还需要做些其他事情才能使此测试按我期望的方式执行吗? getlimitRecordWithCompletion 可以正常执行,但未经测试。该测试最终超时,并且从不满足ExpectationLimitResult。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)