Objective c OCMock和Nocilla不兼容吗?
我试图在同一组单元测试中同时使用OCMock和Nocilla。我使用CoCoapod来安装它们,并使用Objective c OCMock和Nocilla不兼容吗?,objective-c,ocmock,nocilla,Objective C,Ocmock,Nocilla,我试图在同一组单元测试中同时使用OCMock和Nocilla。我使用CoCoapod来安装它们,并使用 #import <OCMock/OCMock.h> #import <Nocilla/Nocilla.h> 我得到一个编译器错误,如下所示: /Users/ravi/GitHub/Mobile/ClinicalInbox/ClinicalInboxTests/ClinicalInboxTests.m:63:93:在“LSStubRequestDSL*”类型的对象上找不
#import <OCMock/OCMock.h>
#import <Nocilla/Nocilla.h>
我得到一个编译器错误,如下所示:
/Users/ravi/GitHub/Mobile/ClinicalInbox/ClinicalInboxTests/ClinicalInboxTests.m:63:93:在“LSStubRequestDSL*”类型的对象上找不到属性“\u andReturn”
直到我从代码中删除#import”“
,它才会消失。然后我所有的测试都能完美运行
是否存在与OCMock和Nocilla的已知不兼容?我似乎在任何地方都找不到一个——事实上,我看到的恰恰相反——很多人总是在同一个测试框架中同时使用这两个工具。所以我必须假设我做错了什么,有人能告诉我什么吗?OCMock确实定义了一个名为
andReturn
的宏,它有一个参数。如果Nocilla还使用了一个名为andReturn
且只有一个参数的东西,那么这就是不兼容。如上所述,可以通过从OCMock中取消定义andReturn
宏来避免这种情况。这显然意味着以后不可能使用OCMock语法的这一部分。OCMock确实定义了一个名为andReturn
的宏,该宏有一个参数。如果Nocilla还使用了一个名为andReturn
且只有一个参数的东西,那么这就是不兼容。如上所述,可以通过从OCMock中取消定义andReturn
宏来避免这种情况。这显然意味着以后不可能使用OCMock语法的这一部分。您可以使用标准方括号表示法来使用这两种语法,例如:
[stubRequest(@"GET", myURL) andReturn](200).withBody(body);
难看,但它可以工作。您可以使用标准方括号表示法,例如:
[stubRequest(@"GET", myURL) andReturn](200).withBody(body);
丑陋,但它可以工作。也可以通过在导入OCMock和Nocilla之间放置一个
#undef andReturn
来“修复”错误。这表明两个库可能不兼容。也可以通过在导入OCMock和Nocilla之间放置一个#unde andReturn
来“修复”错误。这表明这两个库可能不兼容。我同意。我只是对这种不兼容感到惊讶,因为我看到了这么多人同时使用这些库的例子。我想,使用宏实现您的行为是一个不幸的副作用,但我理解这两个库为什么都这么做。我同意。我只是对这种不兼容感到惊讶,因为我看到了这么多人同时使用这些库的例子。我想,使用宏实现您的行为是一个不幸的副作用,但我理解这两个库为什么都这么做。