簡體   English   中英

iOS單元測試:測試是否調用KVO觀察者

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM