用iPhone SDK实现unit testing

所以我按照这个教程来设置我的应用程序的unit testing,当我有点卡住了。

在该教程中的第8点,它显示了这个图像,这就是我在构build时所期待的: alt text http://developer.apple.com/library/ios/documentation/Xcode/Conceptual/iphone_development/art/logic_test_failure_text_editor .JPG

然而,这不是我build立时得到的。 我得到这个错误消息: Command /bin/sh failed with exit code 1以及unit testing创​​build的错误消息。 然后,当我展开第一个错误,我得到这个:

 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 

现在这是非常奇怪的,因为它正在运行testing(并成功,你可以看到我的STFail射击),因为如果我添加一个不同的testing,通过我没有得到任何错误,所以testing工作正常。 但是,为什么我得到这个额外的构build失败?

也可能会注意到,当下载解决scheme/模板应该工作箱,我得到同样的错误。 我猜我已经在这里设置了错误,但我只是按照100%正确的教程! 如果有人能帮助,我会非常感激!

谢谢

编辑:根据这个博客 , 这个职位和其他一些网站,我不是唯一得到这个问题。 自从xCode 3.2发布以来,就像这样,假设苹果开发中心的文档和教程等也在3.2之前。

但是有些人说这是一个已知的问题,而其他人似乎认为这是故意的。 我喜欢扩展控制台和代码消息,我当然不喜欢“Command / bin / sh …”错误,并真的认为他们会logging这样的更新。 无论如何,希望它很快就会被修复。

更新:这是确认自从xCode 3.2.1发布以来发生了一些变化。

这个图像: 替代文字http://ing0.co.uk/info/pics/unittest-xcode-3.2.1.png是从我的testing版本使用3.2.1。 这是一个从旧版本(3.1.4): 替代文字http://ing0.co.uk/info/pics/unittest-xcode-3.1.4.png 。 (这两个项目都没有改变)。

编辑:图片URLS更新。

双击“目标”/“您的脚本目标名称”下的“运行脚本”,然后键入

 #在这个testing包中运行unit testing。 
 “$ {SYSTEM_DEVELOPER_DIR} / Tools / RunUnitTests”1> /tmp/RunUnitTests.out

基本上你需要追加

 1> /tmp/RunUnitTests.out

到现在已经有了

你有没有尝试将构buildconfiguration设置为testing用例的“debugging”?

我这样做,如http://nothing2fancy.com/2009/08/04/failed-tests-for-architecture-i386-gc-off/所示,它的工作;

尝试在Xcode 3.2中检查此问题SenTestCase和XCBuildLogCommandInvocationSection错误

在这个问题的解决方法为我工作。

菜单:项目 – >新的生成阶段 – >新的RunScript生成阶段 – >将以下内容粘贴到空的文本区域:

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

现在尝试构build,你应该在失败的unit testing中得到一个错误。

我不知道这是否正确,但这对我来说是有用的。

在“信息testing用例”的“常规”选项卡中,我将主应用程序可执行目标添加为直接依赖项。

而'i386'(GCclosures)“没有错误”。

祝你好运。

在创buildfirttesting用例类时,请确保将Target设置为您的UnitTest目标,而不是您的应用程序目标。

如果您在创build课程时忘了这样做,则可以在现有课程的“获取信息”中设置目标。

好吧,从来没有在XCode中使用unit testing(当然,我喜欢JUnit,在Java时代很好)。 所以这只是一个试验:你使用的是什么编译器,GCC或LLVM? 也许海湾合作委员会是安全的更好的select。

在“项目设置”中启用“仅生成活动架构”时是否具有相同的行为? 这个开关在为armv6和armv7构build时删除重复的错误信息,也许它是相关的。

请看看苹果最新的样品 。 当你下载代码时,有一个读取我的文件,其中明确写了:

 ——————————————————————————————————————————————————————————————————————————————— 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. ——————————————————————————————————————————————————————————————————————————————— 

因此,sentest套件有一些变化。 我不认为这是值得提交一个错误。

这是预期的行为。 如果其中一个testing失败,构build将失败,如果所有testing都通过,构build将成功。