web-dev-qa-db-ja.com

iOSでのユニットテストの実装

このチュートリアル に従って、少し行き詰まったときにアプリで単体テストをセットアップしました。

そのチュートリアルの箇条書き8に、このイメージが表示されます。これは、ビルド時に期待する必要があります。 代替テキストhttp://developer.Apple.com/library/ios/documentation/Xcode/Conceptual/iphone_development /art/logic_test_failure_text_editor.jpg

しかし、これは私がビルドしたときに得られるものではありません。このエラーメッセージが表示されます:Command /bin/sh failed with exit code 1およびユニットテストが作成したエラーメッセージ。次に、最初のエラーを展開すると、次のようになります。

PhaseScriptExecution "Run Script" "build/3D Pool.build/Debug-iphonesimulator/LogicTests.build/Script-1A6BA6AE10F28F40008AC2A8.sh"
cd "/Users/james/Desktop/FYP/3D Pool"
setenv ACTION build
setenv ALTERNATE_GROUP staff
...
setenv XCODE_VERSION_MAJOR 0300
setenv XCODE_VERSION_MINOR 0320
setenv YACC /Developer/usr/bin/yacc
/bin/sh -c "\"/Users/james/Desktop/FYP/3D Pool/build/3D Pool.build/Debug-iphonesimulator/LogicTests.build/Script-1A6BA6AE10F28F40008AC2A8.sh\""

/Developer/Tools/RunPlatformUnitTests.include:412: note: Started tests for architectures 'i386'
/Developer/Tools/RunPlatformUnitTests.include:419: note: Running tests for architecture 'i386' (GC OFF)
objc[12589]: GC: forcing GC OFF because OBJC_DISABLE_GC is set
Test Suite '/Users/james/Desktop/FYP/3D Pool/build/Debug-iphonesimulator/LogicTests.octest(Tests)' started at 2010-01-04 21:05:06 +0000
Test Suite 'LogicTests' started at 2010-01-04 21:05:06 +0000
Test Case '-[LogicTests testFail]' started.
/Users/james/Desktop/FYP/3D Pool/LogicTests.m:17: error: -[LogicTests testFail] : Must fail to succeed.
Test Case '-[LogicTests testFail]' failed (0.000 seconds).
Test Suite 'LogicTests' finished at 2010-01-04 21:05:06 +0000.
Executed 1 test, with 1 failure (0 unexpected) in 0.000 (0.000) seconds

Test Suite '/Users/james/Desktop/FYP/3D Pool/build/Debug-iphonesimulator/LogicTests.octest(Tests)' finished at 2010-01-04 21:05:06 +0000.
Executed 1 test, with 1 failure (0 unexpected) in 0.000 (0.002) seconds

/Developer/Tools/RunPlatformUnitTests.include:448: error: Failed tests for architecture 'i386' (GC OFF)
/Developer/Tools/RunPlatformUnitTests.include:462: note: Completed tests for architectures 'i386'
Command /bin/sh failed with exit code 1

テストを実行している(そしてSTFailの起動を確認できるように成功している)ので、これは非常に奇妙です。合格した別のテストを追加してもエラーが発生しないため、テストは正常に機能しています。しかし、なぜこの余分なビルドが失敗するのですか?

箱から出してうまくいくはずのソリューション/テンプレートをダウンロードすると、同じエラーが発生することにも注意してください。ここで何か間違った設定をしたと思いますが、チュートリアルを100%正しく実行しました。

編集: このブログこの投稿 および他のいくつかのウェブサイトによると、この問題を抱えているのは私だけではありません。 Apple開発センターのドキュメントやチュートリアルなども3.2より前のものであると仮定すると、xCode 3.2のリリース以降はこのようになっています。

ただし、既知の問題であると言う人もいれば、これは意図的なものだと考える人もいます。私は拡張コンソールとコードメッセージの両方が欲しいのですが、「Command/bin/sh ...」エラーは確かに好きではなく、そのような更新が文書化されていると本当に思います。とにかくすぐに修正されることを願っています。

更新:xCode3.2.1のリリース以降に何かが変更されたことを確認します。

この画像: 代替テキストhttp://ing0.co.uk/info/pics/unittest-xcode-3.2.1.png は、3.2.1を使用したテストビルドからのものです。これは古いバージョン(3.1.4)からのものです: 代替テキストhttp://ing0.co.uk/info/pics/unittest-xcode-3.1.4.png 。 (両方のプロジェクトは変更されていません)。

36
ingh.am

「ターゲット」/「スクリプトのターゲット名」の下にある「スクリプトの実行」をダブルクリックして、「

#このテストバンドルで単体テストを実行します。 
 "$ {SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests" 1> /tmp/RunUnitTests.out

基本的に追加する必要があります

 1> /tmp/RunUnitTests.out

すでにそこにあるものに

5
Anton

メニュー:プロジェクト->新しいビルドフェーズ->新しいRunScriptビルドフェーズ->以下を空のテキスト領域に貼り付けます。

"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests" 1> /tmp/RunUnitTests.out

ここでビルドを試みてください。失敗した単体テストでエラーが発生するはずです。

1
Akku

この問題を確認してみてください Xcode 3.2のSenTestCaseおよびXCBuildLogCommandInvocationSectionエラー

その質問の回避策は私のために働きます。

1
Joe Yang

テストケースのビルド構成を「デバッグ」に設定しようとしましたか?

http://nothing2fancy.com/2009/08/04/failed-tests-for-architecture-i386-gc-off/ に示すように、私はそれを行い、それは機能しました

1
Thomas Joulin

Appleの最新の サンプル をご覧ください。コードをダウンロードすると、readmeファイルがあります。このファイルには次のように明確に記述されています。

———————————————————————————————————————————————————————————————————————————————
Running Logic Tests
To run the logic tests:
1. Choose Project > Set Active Target > CalculatorTests.
2. Choose Project > Set Active SDK > Simulator.
3. Choose Build > Build. Xcode runs the test cases implemented in
   the CalculatorTests.m file.
4. Choose Build > Build Results to open the Build Results window, containing
   the tests results. You may have to click the Show Transcript button (the
   third button on the bottom-left corner of the build results list) to view
   the build transcript.

The logic-tests results look similar to this:

   PhaseScriptExecution <project_directory>/build/iPhoneUnitTests.build/Debug-iphonesimulator/CalculatorTests.build/Script-17AA84010F99894F00167681.sh
       cd <project_directory>
       /bin/sh -c <project_directory>/build/iPhoneUnitTests.build/Debug-iphonesimulator/CalculatorTests.build/Script-17AA84010F99894F00167681.sh
   /Developer/Tools/RunPlatformUnitTests.include:364: note: Started tests for architectures 'i386'
   /Developer/Tools/RunPlatformUnitTests.include:371: note: Running tests for architecture 'i386' (GC OFF)
   objc[1222]: GC: forcing GC OFF because OBJC_DISABLE_GC is set
   objc[1222]: GC: forcing GC OFF because OBJC_DISABLE_GC is set
   Test Suite '<project_directory>/build/Debug-iphonesimulator/CalculatorTests.octest(Tests)' started at 2009-05-19 16:55:28 -0700
   Test Suite 'CalculatorTests' started at 2009-05-19 16:55:28 -0700
   <time> otest[1222:80f] -[CalculatorTests testAddition] setUp
   <time> otest[1222:80f] -[CalculatorTests testAddition] start
   <time> otest[1222:80f] -[CalculatorTests testAddition] end
   <time> otest[1222:80f] -[CalculatorTests testAddition] tearDown
   Test Case '-[CalculatorTests testAddition]' passed (0.007 seconds).
   <time> otest[1222:80f] -[CalculatorTests testDivision] setUp
   <time> otest[1222:80f] -[CalculatorTests testDivision] start
   <time> otest[1222:80f] -[CalculatorTests testDivision] end
   <time> otest[1222:80f] -[CalculatorTests testDivision] tearDown
   Test Case '-[CalculatorTests testDivision]' passed (0.003 seconds).
   <time> otest[1222:80f] -[CalculatorTests testInputException] setUp
   <time> otest[1222:80f] -[CalculatorTests testInputException] start
   <time> otest[1222:80f] -[CalculatorTests testInputException] end
   <time> otest[1222:80f] -[CalculatorTests testInputException] tearDown
   ...
   Test Case '-[CalculatorTests testSubtractionNegativeResult]' passed (0.002 seconds).
   Test Suite 'CalculatorTests' finished at 2009-05-19 16:55:28 -0700.
   Executed 6 tests, with 0 failures (0 unexpected) in 0.021 (0.022) seconds

   Test Suite '<project_directory>/build/Debug-iphonesimulator/CalculatorTests.octest(Tests)' finished at 2009-05-19 16:55:28 -0700.
   Executed 6 tests, with 0 failures (0 unexpected) in 0.021 (0.024) seconds

   /Developer/Tools/RunPlatformUnitTests.include:388: note: Passed tests for architecture 'i386' (GC OFF)
   /Developer/Tools/RunPlatformUnitTests.include:399: note: Completed tests for architectures 'i386'


Remember that logic tests are executed as part of the build process to provide
you with build errors for failed unit tests. Logic unit-test bundles are not
intented to run in iPhone Simulator or a device.

———————————————————————————————————————————————————————————————————————————————

したがって、センテスティングキットにいくつかの変更があります。バグを報告する価値はないと思います。

0

最初のテストケースクラスを作成するときは、ターゲットがアプリケーションターゲットではなく、UnitTestターゲットに設定されていることを確認してください。

クラスの作成時にこれを忘れた場合は、既存のクラスの「情報を取得」して、そこにターゲットを設定できます。

0
Jack Creigh

OK、XCodeでユニットテストを試したことはありません(もちろん、古き良きJUnitが好きでしたJava回)。これは単なる試用版です。GCCとLLVMのどちらのコンパイラを使用していますか?多分GCC安全を期すためのより良い選択です。

プロジェクト設定で「アクティブなアーキテクチャのみをビルドする」が有効になっている場合、同じ動作がありますか?このスイッチは、armv6およびarmv7用にビルドするときに重複するエラーメッセージを削除します。おそらく関連しています。

0
Kay