SenTestKit: очистка после ВСЕХ испытаний? - PullRequest
11 голосов
/ 02 сентября 2010

Я использую SenTest в XCode для своих модульных тестов.Я должен запустить задачу командной строки, чтобы проверить мои модульные тесты.Я могу сделать это с помощью метода + initialize моего тестового класса (конечно, подкласса SenTestCase).

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

Есть ли какой-нибудь способ создать подкласс класса SenTest для этого, который я пропускаю?

Ответы [ 2 ]

36 голосов
/ 04 сентября 2010

Не запускайте инструмент командной строки в + initialize. Это отправляется средой выполнения Objective C, когда класс впервые отправляет любое сообщение.

Вместо этого запустите инструмент командной строки в методе теста +setUp. (Обратите внимание, что я действительно имел в виду +setUp, а не -setUp; многие люди, кажется, немного нечетки в разнице между методами класса и экземпляра.)

В этом случае OCUnit вызывает метод class setUp до любых тестов в подклассе SenTestCase и class tearDown метод вызывается OCUnit после всех тестов в SenTestCase подклассе.

Таким образом, общий поток для определенного SenTestCase подкласса:

  • отправить +setUp на SomeTestCase
  • для каждого test метода, начинающегося с SomeTestCase (назовите его test___)
    • создать новый экземпляр SomeTestCase
    • отправить -setUp на него
    • отправить -test___ на него
    • отправить -tearDown на него
    • отпустите
  • отправить +tearDown на SomeTestCase

Таким образом, если у вас есть что-то, что нужно сделать до запуска любого из ваших -test методов, или что-то, что нужно сделать после того, как все ваши -test методы запущены, есть определенная точка, в которой вы можете это случилось. (Вместо того, чтобы полагаться на управление памятью, которое не является детерминированным таким же образом и может не быть детерминированным вообще, если вы используете GC.)

0 голосов
/ 02 сентября 2010

Вы должны взглянуть на Google Toolbox для Mac или его дальнейшее производное GHUnit .Оба (я думаю) обеспечивают настройку на уровне класса и, по крайней мере, демонтаж.Если вы действительно хотите запустить командную строку до запуска всех тестов, а затем вторую командную строку (возможно, чтобы убить первую) после запуска тестов, я бы изменил фазу сборки сценария оболочки, которая запускает модульные тесты (последний шагв фазах сборки цели связки UnitTest).

...