我将 Jenkins 与 Xcode 插件配置为通过将测试构建操作添加到自定义 xcodebuild 参数设置来运行单元测试。有关让 Jenkins 使用 Xcode 5 运行单元测试的更多信息,请参阅此question https://stackoverflow.com/q/18921078/10223.
现在我已经运行它了,它似乎混合了 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 **
我进一步研究了这个问题,并将詹金斯排除在外。如果我直接在命令提示符下运行 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
如上所述,输出是无序的。
这可能是由于不直接写入标准输出时缓冲或缺乏缓冲造成的吗?有谁知道为什么会发生这种情况以及我可以执行的任何解决方法来解决它?