代码之家  ›  专栏  ›  技术社区  ›  Kornel

在可可中发布特定通知之前如何阻止?

  •  2
  • Kornel  · 技术社区  · 15 年前

    在发布特定通知之前,睡眠/等待的最佳方式是什么?

    我用异步API来获取数据 NSNotification (通知来自cocoa,我无法避免)我需要对它进行单元测试。

    到目前为止,我已经知道了半忙等待:

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

    如果不处理运行循环,则不会收到通知。但是,当需要的通知出现时,如何立即从运行循环中断呢?

    2 回复  |  直到 15 年前
        1
  •  2
  •   smorgan    15 年前

    runmode:beforedate:将只运行一次循环,因此可以在循环中使用该调用,直到检测到通知已被处理为止(如果没有其他操作,则处理程序可以将测试类中的成员变量翻转为yes)。

        2
  •  1
  •   Quinn Taylor    15 年前

    如果这只是关于单元测试代码对通知的反应,我认为导致线程休眠可能是过度的。我想到了几个问题…

    1. 您将如何测试通知响应是通过还是失败?您是否可以测试任何可测量的副作用?
    2. 您能否发送自己的nsnotification来衡量响应?(您提到,通常由NsrUnloap处理,但如果您可以模拟通知,测试将更容易预测。)
    3. 如果(出于某种原因)您试图测试通知是否已发送,是否有必要?(如果它是自动的,不要麻烦“如果它是用户生成的,单元测试可能很难,但是模拟它可以简化事情。)

    如果您真的需要创建一个要测试的多线程场景,您可能会看到 testLockUnlock 在里面 this unit test code 例如。(我只是想确保我的代码正确地使用集合中内置的锁或通用可变对象。)