2013-11-02 2 views
4

Я сделал подкласс MKMapView. В модульном тесте я хочу знать, когда я вызываю определенный метод этого подкласса, что вызывается соответствующий метод MKMapView и класс аргумента. Могу ли я использовать OCMock для этого?Могу ли я использовать OCMock для проверки того, вызван ли суперкласс?

EDIT:

я принял ответ, но я хочу уточнить, что мой вопрос был о том, когда супер класс не может быть непосредственно дублер в тестовом модуле (очевидно, это так, потому что, как работает наследование). И похоже, что OCMock и OCMockito могут использоваться только для объектов, которые вводят в класс под тестом. Так что, в основном, я думаю, мне нужно прибегнуть к их ручному подбору.

ответ

4

Чтобы ответить на этот вопрос, давайте потратим немного времени, чтобы посмотреть, как OCMock и подобные структуры работают:

Mocking рамка использует Objective-C runtime для прокси или обруча оригинального класс, так что любые вызов метода в этом классе перенаправляется на насмешливую структуру, которая имеет предварительно записанный набор инструкций о том, что делать, когда вызывается данный метод.

Таким образом, ответ: да, когда вы издеваетесь над классом, вы также неявно высмеиваете методы суперкласса. Вы можете записать ожидание, что этот метод будет вызван, и убедитесь, что это произошло. Вы также можете проверить аргументы, которые были поставлены.

Это не нужно знать детали для того, чтобы эффективно использовать насмешливые рамки, однако, если вы заинтересованы в изучении некоторых подходов к проксированию класса, посмотри на следующем:

Кстати, мой личный фаворит насмешливый рамки является OCMockito

+0

Отлично! Я считаю, что делать вручную просто громоздко. – huggie

+0

@ huggie - Действительно. К счастью, мы видим больше фреймворков, которые на самом деле используют swizzling для создания полезных вещей. , , Хотя, я все еще ожидаю: a) рамки AOP и b) что-то, чтобы более выразительно исправлять жесткую или статическую зависимость. –

+0

Поскольку вы так много понимаете, внутренности, может быть, вы можете попытаться реализовать его. :) – huggie

2

Я не думаю, что OCMock может сделать это.

См How to Test Calls to Super (iosunittesting.com)

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

Смежные вопросы