0

我正在使用 XCTestCase 进行 iOS 单元测试,并且由于异步 Web 服务处理程序上的“无法识别的选择器”而崩溃,该处理程序通过 completionHandler 块返回操纵的 NSDictionary。

崩溃不是我对断言语句(XCTAssertNoThrows)的期望,我想看到由于崩溃而导致的断言失败,但是我编写的测试方法停止执行并且没有任何测试结果(通过/失败)结束。

- (void)testMethod
{
    XCTestExpectation *expectation = [self expectationWithDescription:@"Task longer than timeout"];

    [serviceHandler getInfoCompletionHandler:^(NSDictionary *infoDict){

        NSString *value = infoDict[@"Key"];
        XCTAssert(value.length > 0, @"Value should not be empty.");
        [expectation fulfill];

    } failure:^(NSError *error){

    NSLog(@"Error: %@",error);
        [expectation fulfill];

    }];

    [self waitForExpectationsWithTimeout:5 handler:^(NSError *error){
        if (error) {
            NSLog(@"Error: %@",error);
        }
    }];
}

不幸的是,服务处理程序代码没有被隔离来进行适当的单元测试。由于它不是孤立的,@try...@catch 没有捕获 NSInvalidArgumentException 并且它是无用的。很可能,我想实现顶级 NSSetUncaughtExceptionHandler,但我不知道如何使来自 NSSetUncaughtExceptionHandler 的相关测试失败。

4

0 回答 0