Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing iOS:为块编写测试_Unit Testing_Tdd_Ios_Objective C_Cocoa - Fatal编程技术网

Unit testing iOS:为块编写测试

Unit testing iOS:为块编写测试,unit-testing,tdd,ios,objective-c,cocoa,Unit Testing,Tdd,Ios,Objective C,Cocoa,我正在尝试为一个函数编写一个测试,该函数包含一个成功和失败块。这是我第一次尝试测试: - (void)testThatValidSearchProducesSearchResults { __block NSArray *searchResults; __block NSError *searchError; [self.searchQuery searchForPlaces:@"The White House" su

我正在尝试为一个函数编写一个测试,该函数包含一个
成功
失败
块。这是我第一次尝试测试:

- (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的内容,最有可能的响应似乎是“它可能是一个异步API”-您正在排队等待请求,而不是执行它

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


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

我发现im正在排队等待一个请求。我想知道的是如何编写一个测试来实际测试searchForPlaces函数的功能,而不是失败。既然测试预期是同步执行的,那么它测试异步函数的唯一方法就是让它以某种方式等待完成。我猜是某种运行循环在等待一个或另一个完成方法启动,或者计时器过期,或者,您可以更改您希望测试的内容。查看队列以查看请求是否已实际排队,如果已排队,则将其声明为成功,如果未排队,则将其声明为失败。这可能需要模拟队列。。。异步函数的同步测试永远不会是微不足道的。