zoukankan      html  css  js  c++  java
  • 单元测试之block

    前段时间写工厂测试程序,遇到个小问题,就是在发测试命令时,由于回调函数是个block,而block是异步处理的。导致结果无法及时返回。

    查看资料后,我是这么处理的

    #define TestNeedsToWaitForBlock() __block BOOL blockFinished = NO
    #define BlockFinished() blockFinished = YES
    #define WaitForBlock() while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, true) && !blockFinished)
    

      

    - (void)setAndGetStepGoal:(int)goal {
    	NSLog(@"测试设置运动目标值:%d", goal);
    	{
    		TestNeedsToWaitForBlock();
    		[CommandInterface setSteps:goal completion: ^(BOOL success, NSDictionary *info) {
    		    BlockFinished();
    		}];
    		WaitForBlock();
    	}
    	{
    		TestNeedsToWaitForBlock();
    		[CommandInterface getGoal: ^(BOOL success, NSDictionary *info) {
    		    int deviceGoal = [info[@"steps"] intValue];
    		    NSLog(@"设置运动目标值结果:%d>>>>>>%d", goal, deviceGoal);
    		    XCTAssertEqual(goal, deviceGoal, @"goal与期望不符");
    		    BlockFinished();
    		}];
    		WaitForBlock();
    	}
    }
    

      原理其实很简单,使用 CFRunLoopRunInMode,阻止线程退出,等待系统消息。

  • 相关阅读:
    进程与线程的区别
    信号列表详解
    同步与互斥
    互斥锁
    读写锁
    Redis QPS测试
    从分布式锁来看redis和zookpeer!
    JVM虚拟机调参
    log4j.properties配置详解与实例
    生产者消费者(消费者要消费完才能退出)
  • 原文地址:https://www.cnblogs.com/kw-ios/p/4040943.html
Copyright © 2011-2022 走看看