如何使用 GHUnit 测试委托回调

Posted

技术标签:

【中文标题】如何使用 GHUnit 测试委托回调【英文标题】:How to test delegate call back using GHUnit 【发布时间】:2013-03-20 06:16:45 【问题描述】:

我正在尝试编写测试用例来测试我的代表。例如,

-(void)testUserLogin
    loginRequest=[[RTUserLoginRequest alloc]initWithUserNmae:@"1235" password:@"1235"];
    [loginRequest setDelegate:self];
    [loginRequest invoke];




-(void)userLoginRequest:(RTUserLoginRequest *)request didSucceed:(BOOL)succeed

    GHTestLog(@"user login succeed");

此代码运行完美,但问题是当此回调触发时,它不会像 testUserLogin 那样显示在模拟器中。测试这种情况的标准方法是什么

【问题讨论】:

看到这个***.com/questions/1077737/… 【参考方案1】:
-(void)testUserPendingRequest
    userPendingRequest =[[RTCheckUserPendingRequest alloc]initWithUserNmae:@"123"];
    [userPendingRequest setDelegate:self];
    [userPendingRequest invoke];
    [self waitForCompletion:2];
    GHAssertTrue(_isDelegateInvoked, @"check user available invoked");



-(void)checkUserPendingRequest:(RTCheckUserPendingRequest *)request isUserPending:(BOOL)pending
    _isDelegateInvoked=YES;
    if(pending)
        GHTestLog(@"user Pending ");
    else
        GHTestLog(@"User Active");


- (BOOL)waitForCompletion:(NSTimeInterval)timeoutSecs 
    NSDate *timeoutDate = [NSDate dateWithTimeIntervalSinceNow:timeoutSecs];

    do 
        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:timeoutDate];
        if([timeoutDate timeIntervalSinceNow] < 0.0)
            break;
     while (!_isDelegateInvoked);

    return _isDelegateInvoked;

【讨论】:

以上是关于如何使用 GHUnit 测试委托回调的主要内容,如果未能解决你的问题,请参考以下文章

GHUnit,OCMock:如何测试两个指定块之一是不是被调用?

在回调块中运行断言而不是在前端显示错误时,GHUnit 崩溃

带有可可豆荚的 GHUnit

如何在命令行 GHUnit 中使用 UIApplicationDelegate?

GHUnit 作为测试包而不是单独的目标

xcode 中的单元测试(使用 GHUnit 和 OCMock)