我将 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/