0
如果沒有明顯引入延遲,則模仿NSNotificationCenter有時可能會失敗。我創建其中I加入一個單一的測試,測試的通知使用OCMock嘲弄NSNotificationCenter有時會失敗,除非添加延遲
id mock = [OCMockObject observerMock];
[[NSNotificationCenter defaultCenter] addMockObserver:mock name:kMyNotification object:nil];
[[mock expect] notificationWithName:kMyNotification object:[OCMArg any] userInfo:[OCMArg any]];
MyCoolClass *cool = [MyCoolClass new];
[cool methodthatPostsANotification];
//[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
[mock verify];
[[NSNotificationCenter defaultCenter] removeObserver:mock];
基本上該測試失敗週期性除非該註釋runloop線未被註釋一個簡單的測試項目。但是,如果這條線未註釋,它總是成功,因爲我期望它。根據蘋果文檔通知應該同步傳遞,但與行爲,我看到它的行爲像它的異步。基本上我不想在我的單元測試中添加任何有意的延遲/睡眠,以確保它們通過。有沒有什麼可以做的,使這些測試總是通過沒有添加延遲代碼?
因此,如果我正確地閱讀你的答案,你是否建議像這樣的https://gist.github.com/anonymous/9237241? –
是的,只是使用你的模擬而不是真正的通知中心,並同步控制一切。這是主意。 –