Как вы могли бы написать unit test -using OCUnit, чтобы гарантировать, что объекты будут выпущены/сохранены должным образом в Cocoa/Objective-C?
Наивный способ сделать это - проверить значение retainCount, но, конечно, вы никогда не должны использовать retainCount. Можете ли вы просто проверить, присвоено ли объектной ссылке значение nil, чтобы указать, что она была выпущена? Кроме того, какие гарантии у вас есть о сроках, когда объекты фактически освобождены?
Я надеюсь на краткое решение только нескольких строк кода, так как я, вероятно, буду использовать это широко. На самом деле могут быть два ответа: один, который использует пул автозапуска, а другой - нет.
Чтобы уточнить, я не ищу способ всесторонне протестировать каждый объект, который я создаю. Невозможно unit test провести какое-либо поведение всесторонне, не говоря уже о управлении памятью. По крайней мере, было бы неплохо проверить поведение выпущенных объектов для регрессионного тестирования (и убедиться, что одна и та же ошибка, связанная с памятью, не происходит дважды).
Об ответах
Я принял BJ Homer ответ, потому что я нашел, что это самый простой и сжатый способ достижения что я имел в виду, учитывая предостережение о том, что слабые указатели, снабженные Automatic Reference Counting, недоступны в производственных версиях XCode (до 4.2?) По состоянию на 23 июля 2011 года. Мне также было приятно узнать, что
ARC может быть включена для каждого файла; это не требует, чтобы ваш весь проект использует его. Вы можете скомпилировать ваши модульные тесты с помощью ARC и оставьте свой основной проект на ручном удержании, и этот тест будет все еще работают.
При этом для более детального изучения потенциальных проблем, связанных с управлением памятью модулей тестирования в Objective-C, я настоятельно рекомендую Peter Hosey подробный отклик.