gpt4 book ai didi

objective-c - XCTest 在使用期望失败时通过

转载 作者:太空狗 更新时间:2023-10-30 04:01:57 25 4
gpt4 key购买 nike

我正在测试一种在后台运行并在完成时执行代码块的方法。我正在使用期望来处理测试的异步执行。我写了一个简单的测试来显示行为:

- (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(@"fail test"); 行应该失败,但测试通过了。

我还注意到,只有当代码在回调上运行需要一定时间时才会发生这种情况(在我的例子中,我正在检查文件系统上的一些文件)。这就是为什么 usleep(50); 行对于重现案例是必要的。

最佳答案

在所有测试检查之后必须满足期望。将行移动到回调 block 的末尾足以使测试失败:

- (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 中s,fulfill 消息在 block 的末尾发送,这很有意义。

注意:我先找到了an example在回调开始时调用 fulfill 方法的 swift 中。我不知道的是示例是否不正确或者与 Objective-C 有区别。

关于objective-c - XCTest 在使用期望失败时通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29366312/

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