Есть ли какие-нибудь тестовые библиотеки-шпионы для Objective-C? - PullRequest
3 голосов
/ 06 марта 2011

Я хочу использовать BDD-подход к модульному тестированию в проекте iOS, и я только что понял, что, возможно, не существует существующей библиотеки, которая предоставляет тестовые дубликаты разновидности test spy . В идеале я ищу что-то похожее на Mockito , Жасмин или RR .

Прежде чем я потратил неделю свободного времени на написание тестовой библиотеки шпионов, я подумал, что сначала задам вопрос здесь на SO.

До сих пор я смотрел на OCMock и Kiwi , но, похоже, они оба относятся к традиционным высокоуровневым фреймворкам для моделирования по умолчанию которые требуют, чтобы утверждения ожидания были установлены на фазе , до фазы действия . Очевидно, это мешает моему видению прекрасных, DRY , вложенных спецификаций (которые я планирую создавать в Kiwi или Cedar ).

1 Ответ

2 голосов
/ 08 марта 2011

Только что видел это.

Киви определенно не делает этого сейчас. Вы правы в том, что макеты в нем созданы для «стандартного» аранжировки перед фазой действия.

Продолжая, хотя и на первый взгляд, кажется, что добавление основ для шпионской функциональности не потребует слишком много реинжиниринга. Каждое сообщение (за исключением некоторых важных для реализации, зарезервированных селекторов), которое попадает в макет, проходит -[KWMock forwardInvocation:].

По сути, текущий -[KWMock forwardInvocation:] должен быть изменен для записи / копирования всех вызовов, проходящих через него, вместо того, что он делает сейчас. Это была бы примитивная функциональность, которая позволяла бы проверять ожидания позже, запрашивая записанные вызовы. Конечно, придумать хорошую читаемую форму для проверки тоже нетривиально.

Шпион / макет все равно должен был бы знать, какой класс / протокол он использует для предварительной проверки. Это позволяет создавать действительные сигнатуры методов для селекторов отправленных ему сообщений, что позволяет механизму пересылки во время выполнения генерировать фактическую NSInvocation, которая будет пересылаться.

Сейчас я занят другими делами, чтобы реализовать их, но я буду рад ответить на дополнительные вопросы или объединить любые запросы на извлечение. НТН.

...