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