不能在Xcode 5.0中使用OCMock 2.1+存根类方法

阿卜杜

我知道OCMock 2.1+版本支持开箱即用的类方法。但是由于某种原因,它无法与我一起使用。为了确保隔离问题,我简单地克隆了示例OCMock项目(该项目明显标记为2.2.1版),并将其添加到testMasterViewControllerDeletesItemsFromTableView内部

id detailViewMock = [OCMockObject mockForClass:[DetailViewController class]];
[[[detailViewMock stub] andReturn:@"hello"] helloWorld]; 

DetailViewController.h我补充说:

+ (NSString *)helloWorld;

DetailViewController.m

+ (NSString *)helloWorld {
    return @"hello world";
}

但是我继续得到错误:

*** -[NSProxy doesNotRecognize Selector:helloWorld] called!

要查看问题的演示,请克隆此存储库以查看发生了什么。

卡尔·林德伯格

那应该很好。我刚在一个我的项目中尝试过,该项目在Xcode5上使用XCTest,并且该代码已通过。

我会1)确保您使用的是最新版本的OCMock(目前为2.2.1;我认为较新版本中的类方法和Xcode5都有一些修复),以及2)确保您的DetailViewController类是在运行时(即正确目标的一部分)正确链接。

在查看项目时,DetailViewController类是主应用程序测试目标的一部分。对于Xcode5,这似乎意味着该类的两个副本已编译并存在于运行时中,应用程序中的代码调用一个副本,而测试用例中的代码调用另一个副本。这曾经是一个链接器错误(重复的符号),但是无论好坏,链接器现在似乎默默地允许ObjC运行时中存在两个相同类(具有相同名称)的副本。OCMock使用动态查找来找到第一个(编译到应用程序中的一个),但是测试用例直接链接到第二个副本(编译到测试包中的一个)。所以... OCMock实际上并没有嘲笑您认为是的类。

您可以通过在测试用例中验证[DetailViewController类]不等于NSClassFromString(@“ DetailViewController”)(第一个是直接链接的,第二个是动态的)作为测试用例的一部分而看到的。

要正确解决此问题,请在DetailViewController.m的“目标成员身份”中,取消选中测试目标。这样,在运行时中只有一个类的副本,并且事情按您期望的那样工作。测试捆绑软件被加载到主应用程序中,因此所有主应用程序的类都应可用于捆绑软件,而不必直接将它们编译到捆绑软件中。类只能是两个目标之一的一部分,而不是两个目标(一直都是这种情况)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

不能在Xcode 5.0中使用OCMock 2.1+存根类方法

来自分类Dev

为什么不能在Xcode 5中将文件添加到Images.xcassets?

来自分类Dev

是否不能在MVC 5中使用?

来自分类Dev

为什么memset可以在2d数组中正确填充0但不能在该数组中填充1?

来自分类Dev

不能在jQuery方法中使用alert()

来自分类Dev

ES5 不能在 Chrome 中工作,使用 Gulp

来自分类Dev

在Symfony2中使用OAuth 1类

来自分类Dev

在Symfony2中使用OAuth 1类

来自分类Dev

无法存根方法“标题”,因为模拟的类OCMock中不存在这样的方法

来自分类Dev

无法存根方法“标题”,因为在模拟的类OCMock中不存在这样的方法

来自分类Dev

不能在Service类中使用自己的类

来自分类Dev

为什么我不能在“ __construct”中定义对象管理器,而又不能在其他方法(操作)中使用它?zf2

来自分类Dev

不能在使用接口的类中使用EJB

来自分类Dev

C ++ / CLI虚拟方法,不能在派生类中使用虚拟方法

来自分类Dev

如何使用 sinon 在被测函数中存根类方法?

来自分类Dev

FluentWait函数不能在Java类的函数中使用

来自分类Dev

不能在C#中使用WMI类

来自分类Dev

我不能在MFC中使用string和CString类

来自分类Dev

不能在函数中使用类作为参数(JScript)

来自分类Dev

不能在通过Canvas编辑ImageView的类中使用onTouchEvent

来自分类Dev

不能在页面类内容中使用 withFrame

来自分类Dev

JSP不能在CQ5中编译吗?

来自分类Dev

为什么我不能在xcode中设置属性的值?

来自分类Dev

为什么不能在Xcode中添加管脚约束?

来自分类Dev

为什么不能在类中使用静态方法/变量的原因是什么

来自分类Dev

导入类后,为什么不能在java.io.PrintStream中使用print()或println()方法?

来自分类Dev

为什么不能在Java类的main方法中使用它?

来自分类Dev

为什么我们不能在扩展类的静态方法中使用此实例?

来自分类Dev

不能在另一个类 C# 中使用方法

Related 相关文章

  1. 1

    不能在Xcode 5.0中使用OCMock 2.1+存根类方法

  2. 2

    为什么不能在Xcode 5中将文件添加到Images.xcassets?

  3. 3

    是否不能在MVC 5中使用?

  4. 4

    为什么memset可以在2d数组中正确填充0但不能在该数组中填充1?

  5. 5

    不能在jQuery方法中使用alert()

  6. 6

    ES5 不能在 Chrome 中工作,使用 Gulp

  7. 7

    在Symfony2中使用OAuth 1类

  8. 8

    在Symfony2中使用OAuth 1类

  9. 9

    无法存根方法“标题”,因为模拟的类OCMock中不存在这样的方法

  10. 10

    无法存根方法“标题”,因为在模拟的类OCMock中不存在这样的方法

  11. 11

    不能在Service类中使用自己的类

  12. 12

    为什么我不能在“ __construct”中定义对象管理器,而又不能在其他方法(操作)中使用它?zf2

  13. 13

    不能在使用接口的类中使用EJB

  14. 14

    C ++ / CLI虚拟方法,不能在派生类中使用虚拟方法

  15. 15

    如何使用 sinon 在被测函数中存根类方法?

  16. 16

    FluentWait函数不能在Java类的函数中使用

  17. 17

    不能在C#中使用WMI类

  18. 18

    我不能在MFC中使用string和CString类

  19. 19

    不能在函数中使用类作为参数(JScript)

  20. 20

    不能在通过Canvas编辑ImageView的类中使用onTouchEvent

  21. 21

    不能在页面类内容中使用 withFrame

  22. 22

    JSP不能在CQ5中编译吗?

  23. 23

    为什么我不能在xcode中设置属性的值?

  24. 24

    为什么不能在Xcode中添加管脚约束?

  25. 25

    为什么不能在类中使用静态方法/变量的原因是什么

  26. 26

    导入类后,为什么不能在java.io.PrintStream中使用print()或println()方法?

  27. 27

    为什么不能在Java类的main方法中使用它?

  28. 28

    为什么我们不能在扩展类的静态方法中使用此实例?

  29. 29

    不能在另一个类 C# 中使用方法

热门标签

归档