Как я могу использовать объекты OCMock с кодом, который вызывает isKindOfClass?

голоса
7

Я хотел бы проверить код с OCMock.

Внутренности коды вызывают [NSObject isKindOfClass]на макете объекта я обеспечиваю к коду, например , так:

if ([object isKindOfClass:[FancyClass class]]) { ...}

Однако, когда я обеспечить OCMockObject на основе макет, созданный, как это:

mock = [OCMockObject mockForClass:[FancyClass class]];

кажется , что он не проходит isKindOfClassтест.

Какие-либо предложения?

Задан 29/01/2009 в 02:17
источник пользователем
На других языках...                            


2 ответов

голоса
7

Общее правило заключается в том , что , если вы звоните isKindOfClass:и вы не передаете один из классов Plist (например, NSString или NSNumber), Вы делаете это неправильно.

Если метод делает две или более разные вещи в зависимости от того, какой класс ее аргумент, раздирать его на несколько методов, и проверить каждый метод в отдельности.

Если метод делает только одну вещь, но должен взаимодействовать с объектом по-разному в зависимости от того, какой класс он, то:

  1. Составьте протокол. (Протоколы в Obj-C называется «интерфейсы» в некоторых других языках OO, такие как Java.)
  2. Сделайте много классов все соответствуют протоколу. В случае необходимости, использовать категории, чтобы добавить необходимые методы снаружи.
  3. Сделать метод при проверке теста на соответствие протокола, вместо текущей isKindOfClass:проверки.
  4. Сделать метод тестируемых использовать методы в протоколе.
Ответил 29/01/2009 в 03:20
источник пользователем

голоса
2

Как насчет:

    [[[mock stub] andReturnValue:OCMOCK_VALUE((BOOL) {YES})] isKindOfClass:[FancyClass class]];
Ответил 06/05/2013 в 19:37
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more