在单元测试中捕获调试窗口输出?

Posted

技术标签:

【中文标题】在单元测试中捕获调试窗口输出?【英文标题】:Capture debug window output in a unit test? 【发布时间】:2019-11-13 15:53:52 【问题描述】:

如果使用给定参数--static 调用命令行应用程序,我正在编写一些实用程序代码以将统计信息打印到标准输出。现在我只是使用print 和字符串插值(这很棒!)。

看来这也是我应该放入单元测试的内容。

在测试代码中是否有一种简单的方法,将输出重定向到一个字符串,或者以其他方式捕获它以便我可以XCTAssertEqual 反对它?

【问题讨论】:

【参考方案1】:

重定向输出不是你在单元测试中做的方式。相反,您有一些替代选择:

你可以有一个像generateStatistics 这样的辅助函数,它产生一个字符串,然后打印出来。在单元测试中,您不会测试打印部分。相反,您只测试函数generateStatistics 是否提供了正确的结果字符串。然后您可以在集成测试中测试打印部分。

您可以模拟 print 函数,也就是说,将其替换为一个函数,而不是打印字符串,而是收集它们并允许您的测试代码分析它们。我不熟悉 swift,所以我不能告诉你是否可以轻松地直接模拟 print - 如果不能,你可以用其他一些你可以模拟的函数来包装它。

附带说明:您提到您的选项是--static,但我认为您的意思是--statistic,对吧?

【讨论】:

以上是关于在单元测试中捕获调试窗口输出?的主要内容,如果未能解决你的问题,请参考以下文章

如何在单元测试中正确捕获 zap logger 输出

python错误处理/调试/单元测试/文档测试

软件测试之如何编写单元测试用例

在 VS 中运行单元测试与调试单元测试时,我应该期待啥区别?

需要能够在单元测试中捕获 Spring 启动异常

Promise.catch() 不会在 AngularJS 单元测试中捕获异常