2014-10-14 3 views
1

Я пытаюсь использовать OCMock и Nocilla в одном наборе модульных тестов. Я использовал CocoaPods установить их обоих, и ссылаться на них, используяЯвляются ли OCMock и Nocilla несовместимыми?

#import <OCMock/OCMock.h> 
#import <Nocilla/Nocilla.h> 

Но когда я пытаюсь использовать .andReturn Nocilla в следующим образом (где subscriptionData является NSData *):

stubRequest(@"GET", @"https://api.test.com/api/beaconinbox/subscriptions/list").andReturn(200).withBody(subscriptionData); 

Я получаю ошибка компилятор, который выглядит следующим образом:

/Users/ravi/GitHub/Mobile/ClinicalInbox/ClinicalInboxTests/ClinicalInboxTests.m:63:93: Свойство «_andReturn» не найден на объект типа «LSStubRequestDSL *»

Которая сохраняется до тех пор, пока я не удалю #import "<OCMock/OCMock.h>" из моего кода. Тогда все мои тесты проходят отлично.

Есть ли известная несовместимость с OCMock и Nocilla? Я не мог найти нигде - на самом деле я видел как раз наоборот - многие примеры людей, использующих оба в одной и той же тестовой платформе все время. Поэтому я должен предположить, что я делаю что-то неправильно, может ли кто-нибудь сказать мне, что?

+0

Также возможно «исправить» ошибку, помещая «#undef иReturn» между импортирующими OCMock и Nocilla. Это указывает на возможную несовместимость в обеих библиотеках. –

ответ

5

OCMock определяет макрос с именем andReturn, который имеет один аргумент. Если Nocilla также использует то, что называется andReturn, которое имеет один аргумент, то это несовместимость. Как упоминалось выше, его можно избежать, если не определить макрос andReturn от OCMock. Это, очевидно, означает, что впоследствии невозможно использовать эту часть синтаксиса OCMock.

+0

Согласен. Меня просто удивило несовместимость, так как я видел так много примеров людей, использующих библиотеки одновременно. Это неудачный побочный эффект использования макросов для реализации вашего поведения, я думаю, но я понимаю, почему обе библиотеки это сделали. –

0

Вы можете использовать как с помощью стандартной квадратной скобки обозначения, например .:

[stubRequest(@"GET", myURL) andReturn](200).withBody(body); 

Уродливый, но это работает.