iOS单元测试:测试KVO观察者是否被调用

3

I've got a KVO scenario test like this:

- (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]];
}
1个回答

3
你可以使用 XCTestExpectation。 有一个“手动”版本,你可以告诉它何时被满足,但是对于这种情况,你可以使用内置的XCTestCase.keyValueObservingExpectation(for:keyPath:handler:) 方法,该方法专门针对你的情况。

与你期望的示例代码相比的主要更改是,一旦创建了expectation,你需要在setDate:调用后在waitForExpectations(timeout:handler:) 中阻塞并告诉它等待多长时间,然后才能确认事件是否永远不会发生。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接