2009-07-27 69 views
2

什麼是最好的睡眠方式/等待,直到發佈特定通知?如何阻止,直到某些通知發佈在可可?

我有異步API從NSNotification(通知來自可可,我無法避免它)獲取數據的類,我需要單元測試它。

到目前爲止,我已經想通了半忙等待:

[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:10]] 

沒有運行循環的通知的處理都沒有收到。但是,當需要通知時,我怎麼能立即從運行循環中斷開?

+0

類似的問題在這裏:http://stackoverflow.com/questions/1557070/how-to-pause-an-nsthread-until-notified – paulmelnikow 2012-09-27 14:45:40

回答

2

runMode:beforeDate:只會運行一次循環,因此您可以在循環中使用該調用,直到你檢測到通知已經被處理(如果沒有其他的事情,你的處理程序可以將你的測試類中的成員變量翻轉爲YES)。

1

如果這只是單元測試你的代碼對通知的反應,我認爲讓線程進入休眠狀態可能會過度。有幾個問題想起...

  1. 如何測試通知響應是通過還是失敗 - 是否有任何可測量的副作用?
  2. 你可以發送你自己的NSNotification一個措施的反應? (你提到NSRunLoop通常會處理它,但如果你可以嘲笑通知,測試將更具可預測性。)
  3. 如果(由於某種原因)你試圖測試通知是否被髮送,是否有需要? (如果它是自動的,不要打擾 - 如果它是用戶生成的,單元測試可能很難,但嘲弄它可以簡化事情。)

如果您確實需要創建一個多線程場景來測試例如,您可以在this unit test code中查看testLockUnlock。 (我只是想確保我的代碼正確地使用內置到集合或通用可變對象中的鎖。)

相關問題