SenTestKit: очистка после ВСЕХ испытаний?

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

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

Есть какой-то способ подкласса класса SenTest, чтобы сделать это, что я пропускаю?

2 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам