使用iOS实现单元测试

时间:2010-01-04 21:22:53

标签: ios xcode unit-testing ios-simulator

当我遇到困难时,我跟着this tutorial在我的应用上设置了单元测试。

在该教程的第8点,它显示了这个图像,这是我在构建时应该期待的:alt text 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%的教程!

编辑:根据this blogthis post和其他一些网站,我不是唯一一个遇到此问题的网站。自xCode 3.2发布以来就是这样,假设苹果开发中心文档和教程等也是3.2之前的版本。

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

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

此图片: alt text http://ing0.co.uk/info/pics/unittest-xcode-3.2.1.png来自我使用3.2.1的测试版本。这个来自旧版本(3.1.4): alt text http://ing0.co.uk/info/pics/unittest-xcode-3.1.4.png。 (两者的项目没有变化)。

9 个答案:

答案 0 :(得分:5)

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

# Run the unit tests in this test bundle. 
"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests" 1> /tmp/RunUnitTests.out

基本上你需要追加

1> /tmp/RunUnitTests.out

已经存在的内容

答案 1 :(得分:1)

您是否尝试将测试用例的构建配置设置为“Debug”?

我做到了,如http://nothing2fancy.com/2009/08/04/failed-tests-for-architecture-i386-gc-off/所示,它有效

答案 2 :(得分:1)

尝试检查此问题SenTestCase in Xcode 3.2 and XCBuildLogCommandInvocationSection Errors

该问题的解决方法对我有用。

答案 3 :(得分:1)

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

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

现在尝试构建,你应该在失败的单元测试中得到错误。

答案 4 :(得分:0)

我不知道它是否正确,但它对我有用。

  

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

'i386'没有错误(GC OFF)“。

祝你好运。

答案 5 :(得分:0)

创建第一个测试用例类时,请确保将Target设置为UnitTest目标,而不是应用程序目标。

如果您在创建课程时忘记执行此操作,则可以在现有课程中“获取信息”,并在那里设置目标....

答案 6 :(得分:0)

好的,从来没有玩过XCode中的单元测试(当然我喜欢JUnit在古老的java时代)。所以这只是一个试验:你使用什么编译器,GCC或LLVM?也许GCC是更安全的选择。

启用项目设置中的“仅构建活动体系结构”时,您是否具有相同的行为?这个开关在构建armv6和armv7时会删除重复的错误消息,也许它是相关的。

答案 7 :(得分:0)

请查看苹果最新的sample。下载代码时,会有一个自述文件,其中写有:

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

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

因此,sentesting工具包有一些变化。我不认为提交错误是值得的。

答案 8 :(得分:-4)

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

相关问题