it-swarm.com.ru

Реализация модульного тестирования с 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 также выпущены до версии 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 . (Проект для обоих остался без изменений).

36
ingh.am

Дважды щелкните «Run script» в «Targets»/«Your target target name» и введите 

 # Запустите модульные тесты в этом тестовом комплекте. 
 "$ {SYSTEM_DEVELOPER_DIR}/Инструменты/RunUnitTests" 1> /tmp/RunUnitTests.out

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

 1> /tmp/RunUnitTests.out

к тому, что уже есть

5
Anton

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

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

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

1
Akku

попробуйте проверить эту проблему SenTestCase в Xcode 3.2 и XCBuildLogCommandInvocationSection Ошибки

обходной путь в этом вопросе работает для меня.

1
Joe Yang

Вы пытались установить конфигурацию сборки «Отладка» для теста?

я сделал это, как показано на http://nothing2fancy.com/2009/08/04/failed-tests-for-architecture-i386-gc-off/ , и это сработало

1
Thomas Joulin

Пожалуйста, ознакомьтесь с последним образцом Apple . Когда вы загружаете код, появляется файл 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.

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

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

0
Madhup Singh Yadav

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

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

0
Jack Creigh

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

На вкладке «Общие» в информационном тестовом примере я добавить мой основной исполняемый файл приложения цель как прямая зависимость.

И нет ошибки для «i386 ′ (GC OFF)».

Удачи.

0
lufutu

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

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

0
Kay