Подтвердить что ты не робот

Реализация модульного тестирования с iOS

Я следовал этому руководству, чтобы настроить модульное тестирование в моем приложении, когда я немного застрял.

В пуле 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% правильно выполнил урок!

РЕДАКТИРОВАТЬ: Согласно этому блогу, этой публикации и несколько других веб-сайтов, я не единственный, кто получает эту проблему. Так было с момента выпуска xCode 3.2, предполагая, что документы и учебники Apple Dev Center также до версии 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): альтернативный текст http://ing0.co.uk/info/pics/unittest-xcode-3.1.4.png. (Проект для обоих остался без изменений).

4b9b3361

Ответ 1

Дважды щелкните "Запустить script" в разделе "Целевые числа" / "Твое имя script", затем введите

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

В основном вам нужно добавить

1> /tmp/RunUnitTests.out

к тому, что уже существует

Ответ 4

Меню: Проект → Фаза новой сборки → Новая фаза сборки RunScript → Вставьте следующее в пустую область текста:

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

Теперь попробуйте построить, и вы должны получить сообщение об ошибках в модульных тестах.

Ответ 5

Я не знаю этого правильно или нет, но он работает для меня.

В общей вкладке информационного теста, я добавить исполняемый файл основного приложения target как прямая зависимость.

И никакой ошибки для 'i386' (GC OFF) ".

Удачи.

Ответ 6

Когда вы создаете свои классные классы тестов, убедитесь, что Target установлен на целевую страницу UnitTest, а не на целевую программу.

Если вы забудете сделать это при создании класса, вы можете "Получить информацию" в существующем классе и установить там цель.

Ответ 7

Хорошо, никогда не играл с модульными тестами в XCode (конечно, мне нравился JUnit в старые добрые времена Java). Итак, это просто пробная версия: какой компилятор вы используете, GCC или LLVM? Возможно, GCC - лучший выбор, чтобы быть в безопасности.

Есть ли у вас такое же поведение, когда включена опция "Только встроенная активная архитектура" в настройках проекта? Этот переключатель удаляет повторяющиеся сообщения об ошибках при создании для armv6 и armv7, возможно, это связано.

Ответ 8

Пожалуйста, взгляните на последнее яблоко sample. Когда вы загружаете код, есть файл read me, в котором его четко написано:

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

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

Следовательно, есть некоторые изменения в наборе для отправки. Я не думаю, что это было бы полезно для подачи ошибки.

Ответ 9

Это ожидаемое поведение. Сборка завершится неудачно, если один из тестов завершится неудачно, и сборка будет успешной, если пройдут все тесты.