[英]iOS unit test: test that an KVO observer is called
我有一個像這樣的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]];
}
您可以使用XCTestExpectation
。 有一個“手動”版本,您可以在它完成時告訴它,但在這種情況下,您可以使用內置的XCTestCase.keyValueObservingExpectation(for:keyPath:handler:)
方法,該方法適用於您的場景。
從您想要的示例代碼開始的主要變化是,一旦您滿足期望,您需要告訴它等待多長時間之后才能通過在waitForExpectations(timeout:handler:)
阻塞來阻止事件永遠不會發生setDate:
call。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.