У меня есть Jenkins с плагином Xcode, настроенным для запуска модульных тестов, добавив действие тестовой сборки в настройку параметров Custom xcodebuild. Для получения дополнительной информации о том, как заставить Jenkins запускать модульные тесты вообще с помощью Xcode 5, см. Этот вопрос .
Теперь, когда я его запускаю, кажется, что смешивает консольный вывод из инструкций NSLog или окончательное сообщение ** TEST SUCCEEDED **
с результатами теста, из-за чего время от времени отключается парсер, который преобразует результаты unit test в формат JUnit, необходимый для Jenkins.
Например, журнал 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
Выход не соответствует порядку, как описано выше.
Может ли это быть вызвано буферизацией или отсутствием буферизации, когда вы не пишете напрямую на stdout? Кто-нибудь знает, почему это происходит, и какое-либо обходное решение, которое я мог бы выполнить, чтобы исправить это?