当输出重定向到文件时,xcodebuild 会损坏测试结果输出

标签 xcode unit-testing pipe xcode5 xcodebuild

我将 Jenkins 与 Xcode 插件配置为通过将测试构建操作添加到自定义 xcodebuild 参数设置来运行单元测试。有关让 Jenkins 使用 Xcode 5 运行单元测试的更多信息,请参阅此 question .

现在我已经运行它了,它似乎混合了 NSLog 语句或最终 ** TEST SUCCEEDED ** 的控制台输出。带有测试结果的消息,因此有时会导致解析器将单元测试结果转换为 Jenkins 所需的 JUnit 格式。

例如,Jenkins 日志显示如下输出:

Test Case '-[Redacted_Conversion_Tests testConvertTo_ShouldSetamount_WhenamountIsNotZero]' passed (** TEST SUCCEEDED **

0.000 seconds).
Test Case '-[Redacted_Conversion_Tests testConvertTo_ShouldSetamount_WhenamountIsZero]' started.

实际应该是:

Test Case '-[Redacted_Conversion_Tests testConvertTo_ShouldSetamount_WhenamountIsNotZero]' passed (0.000 seconds).
Test Case '-[Redacted_Conversion_Tests testConvertTo_ShouldSetamount_WhenamountIsZero]' started.
** TEST SUCCEEDED **

我对此进行了进一步研究,并将 Jenkins 排除在外。如果我直接在命令提示符下运行 xcodebuild 命令:

xcodebuild \
    -workspace project.xcworkspace \
    -scheme Tests \
    -configuration Release \
    -sdk iphonesimulator7.0 \
    -destination "platform=iOS Simulator,name=iPhone Retina (4-inch),OS=latest" \
    test

输出总是很好、按顺序。

但是,如果我将输出通过管道传输到另一个程序或重定向到文件:

xcodebuild \
    -workspace project.xcworkspace \
    -scheme Tests \
    -configuration Release \
    -sdk iphonesimulator7.0 \
    -destination "platform=iOS Simulator,name=iPhone Retina (4-inch),OS=latest" \
    test > xcodebuild.out
cat xcodebuild.out

如上所述,输出是无序的。

这可能是由于不直接写入标准输出时的缓冲或缺乏缓冲造成的吗?有谁知道为什么会发生这种情况以及我可以执行的任何解决方法来修复它?

最佳答案

正如 Malte 所指出的在上面的评论中,更干净的解决方案可能是

    env NSUnbufferedIO=YES xcodebuild ...

关于当输出重定向到文件时,xcodebuild 会损坏测试结果输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18995187/

相关文章:

objective-c - 如何在 Cocoa 框架中定义全局变量

ios - SearchBar 加载 plist 时出现问题

java - 这是 HashMap 的有效单元测试吗?

javascript - 如何测试主函数中定义的私有(private)函数?

ruby-on-rails - 单元测试运行三次

c# - 使用 C# 在同一进程中使用 IPC 管道

ios - UIView 与 UITableView 和 UIGestureRecognizer 突然停止手势识别

ios - 适用于 App Store 中新发布的最小部署目标

bash - 如何将一个命名管道的输出反馈到另一个命名管道?

c - 从命名管道获取客户端用户 token