你如何編寫急救單元測試?iOS單元測試:如何設置/更新/檢查firstResponder?
我想寫一個測試來確認一種方法將焦點推進到下一個文本字段。 controller
是UIViewController
的後裔。但是這個探索性測試失敗了:
- (void)testFirstResponder
{
[controller view];
[[controller firstTextField] becomeFirstResponder];
STAssertTrue([[controller firstTextField] isFirstResponder], nil);
}
第一行導致視圖被加載,因此它的插口就位。文本字段不爲零。但測試永遠不會通過。
我猜becomeFirstResponder
沒有立即設置第一響應者,但安排它以備後用。那麼是否有一種很好的方式來針對它進行單元測試?
從評論拉起答案接受的答案...讓事情短時間運行:
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate date]];
好的想法,但對於單元測試,在事件隊列中放置消息不起作用,因爲測試結束並且在斷言之前夾具被拆除。反例:將'STAssertTrue'改爲'STAssertFalse'沒有什麼區別。 – 2011-05-29 23:26:40
對,這不起作用...作爲進一步的提示,我剛剛發現你可以在測試條件之前運行一段時間的運行循環:'[[NSRunLoop currentRunLoop] runUntilDate:fiveSecondsFromNow];'(from: http://stackoverflow.com/questions/1077737/ocunit-test-for-protocols-callbacks-delegate-in-objective-c)。我不完全相信這個解決方案真的很「優雅」,但它應該可以工作,並且可能適合「較小」的情況(當你不需要跟弗蘭克一起去時)... – sergio 2011-05-30 11:55:45
非常棒!即使指定一個零的運行時間也有訣竅。 – 2011-05-30 23:42:14