SenTestKit: очистка после завершения всех тестов?

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

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

Есть ли способ подклассифицировать класс SenTest для этого, что я пропускаю?

Ответ 1

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

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

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

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

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

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

Ответ 2

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