- (voID) backgroundMethoDWithCallback: (voID(^)(voID)) callback { dispatch_queue_t backgroundQueue; backgroundQueue = dispatch_queue_create("background.queue",NulL); dispatch_async(backgroundQueue,^(voID) { callback(); });}- (voID) testMethoDWithCallback { XCTestExpectation *expectation = [self expectationWithDescription:@"Add collection bundle"]; [self backgroundMethoDWithCallback:^{ [expectation fulfill]; usleep(50); XCTFail(@"fail test"); }]; [self waitForExpectationsWithTimeout: 2 handler:^(NSError *error) { if (error != nil) { XCTFail(@"timeout"); } }];}
XCTFail(@“失败测试”);对于此测试,该行应该失败,但测试正在通过.
我还注意到,这只发生在回调上运行的代码需要一段时间(在我的情况下,我正在检查文件系统上的一些文件).这就是为什么usleep(50);线条是重现案件的必要条件.
解决方法 所有测试检查后必须满足期望.将行移动到回调块的末尾足以使测试失败:- (voID) testMethoDWithCallback { XCTestExpectation *expectation = [self expectationWithDescription:@"Add collection bundle"]; [self backgroundMethoDWithCallback:^{ usleep(50); XCTFail(@"fail test"); [expectation fulfill]; }]; [self waitForExpectationsWithTimeout: 2 handler:^(NSError *error) { if (error != nil) { XCTFail(@"timeout"); } }];}
我没有找到关于此的明确文档,但是在apple developer guide中,完成消息是在块结束时发送的,这很有意义.
注意:我首先在swift中找到了an example,其中在回调开始时调用了fulfill方法.我不知道的是,如果示例不正确或者与Objective-C存在差异.
总结以上是内存溢出为你收集整理的objective-c – XCTest在使用期望失败时通过全部内容,希望文章能够帮你解决objective-c – XCTest在使用期望失败时通过所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)