如何在“所有输出”窗口中查看Xcode中Google Test的彩色输出?

时间:2012-08-12 20:30:03

标签: c++ xcode unit-testing googletest

我是Xcode(以及一般的Mac)的新手,我正试图将我的一些代码库移植到OS X和iOS上运行。我有一大堆针对Google C ++测试框架(Google Test)编写的单元测试。我成功编译了框架,我可以运行一些测试,但我不确定如何在Xcode中查看彩色输出。

我习惯在Visual Studio中点击“Run”并立即看到一个控制台窗口(带有颜色),让我一眼就知道测试是通过还是失败。

我设法设置了“运行脚本”“构建阶段”,但似乎只输出到日志导航器,它消除了颜色,甚至是固定宽度的输出,使得一眼就看不到测试通过。在运行测试后,我也找不到显示日志的方法。当我这样做时,“全部输出”窗口中没有任何内容。

我玩过XcodeColors,但这似乎不适用于使用ANSI颜色代码的脚本。

此时如果在Xcode中无法完成,我不会感到惊讶。这将是理想的,但如果不是,是否有可能创建一个“运行脚本”,将在独立的终端窗口中运行测试?颜色在那里很好用。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

以下是指向“日志”窗口中文本着色的工具的链接。它是免费的,源代码在github中,所以你可以弄清楚它是如何工作的。第一个链接说它只使用简单的ANSI代码来完成这项工作。

http://deepitpro.com/en/articles/XcodeColors/info
https://github.com/robbiehanson/XcodeColors#readme

要从Xcode中启动执行,您可能需要为项目添加新目标。要添加目标,请单击您的项目,然后屏幕底部会出现“添加目标”按钮。我不确切地知道你正在执行什么,但根据你的问题,这是我最好的猜测:

  • MacOSX / Application / Cocoa-AppleScript或命令行工具 - 创建一个执行单元测试的简单脚本或程序。
  • MacOSX /其他/外部构建系统 - 允许执行外部" make"程序与args。

一旦有办法执行单元测试,您只需要弄清楚如何将单元测试的输出路由到日志窗口。如果您可以修改Google Test项目并使其使用NSLog(),那么这似乎是最简单的解决方案。您可以创建自己的日志记录方法,执行ANSI着色,然后将最终文本发送到NSLog()

已添加:好的。有趣的发现......在开始之前阅读所有内容。这是做什么的:

启动AppleScript编辑器。这是在LaunchPad中。将以下脚本粘贴到其中:

tell application "Terminal"
    activate
    do script "<your commands>" in window 1
end tell

你可以重复&#34;做脚本&#34;根据需要排队。用它来执行单元测试。在脚本编辑器中,执行另存为... /文件格式=脚本并将其保存到安全位置,就像文档目录一样。这将创建一个类似&#34; UnitTests.scpt&#34;。

的文件

现在转到您的iOS项目。选择左上角的项目。选择Build Phases选项卡top-middle。单击右下角的Add Build Phase按钮。这是有趣的部分。

将Shell保留原样(&#34; / bin / sh&#34;)。添加一行:

osascript ~/Documents/UnitTests.scpt

这将在每次构建后执行脚本。

但这是我发现的有趣部分。单击Build Settings(顶部 - 中间)。确保选中全部(不是基本)。向下滚动列表以查找单元测试。打开测试主机。点击Debug旁边的+。您也可以在此处输入上述osascript命令。您可以在此处执行单元测试,如果可以,输出可能会显示在日志中!让我知道会发生什么。

答案 1 :(得分:0)

我熟悉Java:JUnit + JCodecoverage,在移动应用程序:Android和iPhone我懒得用TDD开发,但如果我想开始比:

我会创建一个Hello Word应用程序,并打开JUnitTesting选项: 包括单元测试检查

enter image description here

这将创建一个测试应用程序/目标,你将能够运行它。 Android也是如此:你必须创建一个“测试项目” 一旦我做了并忘记了它是如何工作的,但是,还有其他的东西: - 长按Xcode(4.4)上的播放按钮,您将看到一个下拉菜单:运行,测试,配置文件,分析。

我不能提出这些,因为如果我按Shift + Cmd + 4来截图它会改变,但这里看起来像改变了的菜单: enter image description here

恕我直言:对于银行,外汇,其他金融或军事(高安全性软件),我会使用测试驱动开发,代码覆盖率超过99%,但这些简单的3-4网络服务调用移动应用程序,显示公共数据浏览器中提供的只是浪费时间来开发测试并维护它!

很多时候我需要通过互联网连接测试而不需要。 更糟糕的情况是WI-FI连接,但是路由器不给IP或者让手机出去,但是如果我问手机状态:它是连接的......

GUI流程难以从单元测试中进行测试,这对我来说是有用的:数据来自Web服务并与内部缓存同步。我认为用manu测试做它仍然更便宜。