首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试是否没有数据写入NSPipe

如何测试是否没有数据写入NSPipe
EN

Stack Overflow用户
提问于 2016-07-03 21:23:45
回答 0查看 137关注 0票数 1

到目前为止,我一直在开发一个日志记录框架,如果用户不想将日志消息发送到控制台,我将允许用户提供日志记录的NSPipe

可以启用或禁用Logger,如果禁用,则不应通过管道发送任何数据。

在启用记录器时,很容易检查数据是否已发送到管道中,因为NSFileHandleDataAvailableNotification/readabilityHandler块立即包含数据,并触发availableData块。

但是,如果您要测试数据没有通过管道发送,并尝试应用availableData不包含任何数据的相同想法,则测试将超时,因为availableData仅在接收到数据后才返回。

我想出了一个解决方案,那就是监听通知,如果X秒后还没有收到通知,就满足没有收到通知的期望,前提是如果收到通知,该期望将被满足两次(导致测试失败)。

这种方法的问题是,如果由于某种原因,管道确实接收了一些数据,一旦在readabilityHandler块中满足了期望,测试就会立即成功,并且第二次不会满足期望:

代码语言:javascript
复制
func testDisabledLoggerDoesntLog() {
    let logger = Logger()
    let pipe = NSPipe()

    logger.pipe = pipe
    logger.enabled = false

    let expectation = expectationWithDescription("handler not triggered")
    logger.pipe!.fileHandleForReading.readabilityHandler = { handler in
        expectation.fulfill()
    }

    logger.debug("Test message")

    fulfillAfter(expectation, time: 2)

    waitForExpectationsWithTimeout(3, handler: nil)
}

func fulfillAfter(expectation: XCTestExpectation, time: Double = 4) {
    let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(time * Double(NSEC_PER_SEC)))
    dispatch_after(delayTime, dispatch_get_main_queue()) {
        expectation.fulfill()
    }
}

如果管道接收到数据,会导致测试失败,而如果不接收数据,则会导致测试通过,那么哪种方法会更好呢?

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38170368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档