gpt4 book ai didi

ios - 阻止回调未从 IOS 中的单元测试程序调用

转载 作者:行者123 更新时间:2023-11-29 03:26:58 25 4
gpt4 key购买 nike

我有以下设置。我有一个名为“View”的对象,我想在其中对包含两个dispatch_async 调用的方法进行单元测试。

查看.m

typedef void (^onTaskCompletion)();  //defining the block

-(void) viewdidLoad
{

onTaskCompletion block = ^{
// callback into the block };

[self test1:block];

}

-(void) test1:(onTaskCompletion) block
{

//do something
dispatch_async(queue, ^{

// dispatch async into serial queue & do something

dispatch_async(dispatch_get_main_queue){

// calling the block

block();
};
};
}

当我运行 IOS APP 时, -(void) viewdidLoad 中的 block 被调用。工作得很好。但我遇到的问题是:

在测试中:XCTestCase (.m fie)

@property (retain) View *view;

-(void) testMyCode
{

onTaskCompletion block = ^{
// Never gets called.
};
[view test1:block];
}

当我尝试对该方法 test1() 进行单元测试时,该 block 永远不会被调用。

注意:dispatch_get_main_queue() 内的 test1() 方法中的断点在测试模式下运行时永远不会被击中,但在我刚刚运行应用程序时却会被击中。关于为什么它在应用程序正常运行时有效但在运行单元测试时不起作用有什么想法吗?

最佳答案

您面临的问题是,即使测试尚未完成,测试仍会继续进行。解决方案是停止运行循环,直到异步测试完成。

您可以使用这个极其简单的开源宏 WAIT_WHILE(<expression>, <time_limit>)在这里找到https://github.com/hfossli/AGAsyncTestHelper

- (void)testAsyncBlockCallback
{
__block BOOL jobDone = NO;

[Manager doSomeOperationOnDone:^(id data) {
jobDone = YES;
}];

WAIT_WHILE(!jobDone, 2.0);
}

关于ios - 阻止回调未从 IOS 中的单元测试程序调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20340120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com