睡觉/等到某些通知发布的最佳方法是什么?
我有一个带有异步 API 的类,可以从中获取数据NSNotification
(通知来自 Cocoa,我无法避免),我需要对其进行单元测试。
到目前为止,我已经弄清楚了半忙等待:
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:10]]
如果不处理运行循环通知,则不会收到。但是,当需要的通知到来时,我怎样才能立即从运行循环中中断呢?
睡觉/等到某些通知发布的最佳方法是什么?
我有一个带有异步 API 的类,可以从中获取数据NSNotification
(通知来自 Cocoa,我无法避免),我需要对其进行单元测试。
到目前为止,我已经弄清楚了半忙等待:
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:10]]
如果不处理运行循环通知,则不会收到。但是,当需要的通知到来时,我怎样才能立即从运行循环中中断呢?
runMode:beforeDate: 将只运行一次循环,因此您可以在循环中使用该调用,直到您检测到通知已被处理(如果没有别的,您的处理程序可以将测试类中的成员变量翻转为 YES)。
如果这只是对您的代码对通知的反应进行单元测试,我认为导致线程休眠可能是矫枉过正。想到几个问题...
如果你真的需要创建一个多线程的场景来测试,你可以看看这个单元测试代码testLockUnlock
的例子。(我只是想确保我的代码正确地使用了内置于集合或通用可变对象中的锁。)