iOS:为块编写测试

iOS: Writing tests for blocks

我正在尝试为接受 successfailure 块的函数编写测试。这是我第一次尝试测试:

- (void)testThatValidSearchProducesSearchResults
{
    __block NSArray *searchResults;
    __block NSError *searchError;

    [self.searchQuery searchForPlaces:@"The White House"
                          success:^(NSArray *places) {
                              searchResults = places;
                          }
                          failure:^(NSError *error) {
                              searchError = error;
                          }
     ];

    XCTAssertNotNil(searchResults, @"Valid search should return search results.");
    XCTAssertNil(searchError, @"Valid search should not return an error.");
}

但是,在达到测试条件之前,块中的代码永远不会执行。想准确地测试这个吗?

无法看到 searchQuery 的内容,最有可能的响应似乎是 "its probably an asynchronous API" - 您正在排队请求,而不是执行请求。

因此,您会在请求以某种方式完成之前陷入断言,因此不会调用成功:或失败:块。这应该是预期的行为。

现在,如果它不是异步的,那么恭喜你,你的测试发现了一个错误 - 在被测试的函数中。