【发布时间】:2013-12-18 20:37:00
【问题描述】:
我有以下设置。我有一个名为“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 中的块。工作得很好。但我遇到的问题是:
在测试中:XCTestCase (.m fie)
@property (retain) View *view;
-(void) testMyCode
{
onTaskCompletion block = ^{
// Never gets called.
};
[view test1:block];
}
当我尝试对这个方法 test1() 进行单元测试时,该块永远不会被调用。
注意:dispatch_get_main_queue() 中的 test1() 方法中的断点在测试模式下运行时不会被命中,但在我刚刚运行应用程序时会被命中。关于为什么它在应用程序正常运行但在运行单元测试时不起作用的任何想法?
【问题讨论】:
-
很难测试线程代码,你的单元测试需要运行runloop
标签: ios objective-c unit-testing