2013-09-25 12 views
10

カスタムxcodebuild引数設定にテストビルドアクションを追加することによりユニットテストを実行するようにXcodeプラグインを設定しました。ユニットテストをXcode 5で実行するようにJenkinsを取得する方法の詳細については、questionを参照してください。xcodebuildは、出力がファイルにリダイレクトされたときにテスト結果の出力を壊します。

これでNSLogステートメントのコンソール出力または最終結果メッセージ** TEST SUCCEEDED **がテスト結果と混ざっているように見えるため、ユニットテスト結果をJenkinsに必要なJUnitフォーマットに変換するパーサーをトリプルアップすることがありました。例えば

、ジェンキンスログは、このような出力を示しています。それは実際にあるべきとき

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 

出力は常に細かく、順番に出てきます。

場合、しかし、Iパイプ他のプログラムに出力またはファイルにリダイレクト:上記のように

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に直接書き込まないとバッファリングやバッファリングが不十分なことが考えられますか?なぜこれが起こっているのか、それを修正するために私が実行できる可能性のある回避策を知っている人はいますか?

+0

何パーサあなたはJUnitのテスト結果への出力を変更するために使用しますかかもしれませんか? – kocodude

+0

[OCUnit2JUnit] – GBegen

答えて

9

answerのおかげで、私は実質的にscriptコマンドを使ってバッファリングを無効にする方法を発見しました。

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

別のコマンドにパイプする場合は、* cough * ocunit2junit * cough * then '' ' スクリプト-q/dev/null xcodebuild ... | ocunit2junit '' ' は役に立ちます – Jon

+5

ゲームの後期ですが、これを行う別の方法は' env NSUnbufferedIO = YES xcodebuild ... 'です。ヨセミテとXcode 7でテストされました。 –

9

上記のコメントでMalteで述べたように、クリーンな解決策は

env NSUnbufferedIO=YES xcodebuild ... 
+0

それは本当の解決策です –

関連する問題