我有一个像这样的KVO场景测试:
- (void)testObserverCalled
{
__block BOOL executed = NO;
[[RACObserve(model, dateText) skip:1] subscribeNext:^(id x) {
executed = YES;
}];
[model setDate:[NSDate date]];
XCTAssertTrue(executed);
}
目前我使用一个执行的BOOL值来测试是否调用了观察者块,是否有更好的方法,比如在测试函数结束之前必须调用的断言?
像这样:XCAssertCalledBeforeFunctionReturn()
这样我就可以将代码更改为:
- (void)testObserverCalled
{
[[RACObserve(model, dateText) skip:1] subscribeNext:^(id x) {
XCAssertCalledBeforeFunctionReturn()
}];
[model setDate:[NSDate date]];
}
答案 0 :(得分:2)
您可以使用XCTestExpectation
。有一个"手册"您完成时告诉它的版本,但在这种情况下,您可能可以使用内置的XCTestCase.keyValueObservingExpectation(for:keyPath:handler:)
方法来准确地用于您的方案。
您所需的示例代码的主要变化是,一旦您满足期望,您需要告诉它等待多长时间才能确定事件永远不会发生在waitForExpectations(timeout:handler:)
之后阻塞您的setDate:
来电。