iOS:为块编写测试
iOS: Writing tests for blocks
我正在尝试为接受 success
和 failure
块的函数编写测试。这是我第一次尝试测试:
- (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" - 您正在排队请求,而不是执行请求。
因此,您会在请求以某种方式完成之前陷入断言,因此不会调用成功:或失败:块。这应该是预期的行为。
现在,如果它不是异步的,那么恭喜你,你的测试发现了一个错误 - 在被测试的函数中。
我正在尝试为接受 success
和 failure
块的函数编写测试。这是我第一次尝试测试:
- (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" - 您正在排队请求,而不是执行请求。
因此,您会在请求以某种方式完成之前陷入断言,因此不会调用成功:或失败:块。这应该是预期的行为。
现在,如果它不是异步的,那么恭喜你,你的测试发现了一个错误 - 在被测试的函数中。