Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 获得;“无法识别的选择器”;在单元测试中尝试使用核心数据管理对象XCode生成的类时?_Iphone_Objective C_Core Data_Xcode4_Ocunit - Fatal编程技术网

Iphone 获得;“无法识别的选择器”;在单元测试中尝试使用核心数据管理对象XCode生成的类时?

Iphone 获得;“无法识别的选择器”;在单元测试中尝试使用核心数据管理对象XCode生成的类时?,iphone,objective-c,core-data,xcode4,ocunit,Iphone,Objective C,Core Data,Xcode4,Ocunit,为什么在单元测试中尝试使用核心数据管理对象XCode生成的类时会出现“无法识别的选择器” 也就是说,在测试用例中,我必须将方法路径设置为核心数据管理对象的实例(我使用的是Xcode 4生成的管理对象)。为了帮助保持测试的轻量级,我可以自己创建对象(不使用核心数据框架)。但是,当我尝试使用属性时,我得到了“无法识别的选择器” 我想问题是: 为什么我会得到这个“无法识别的选择器” 我如何修改我正在做的事情,以创建核心数据管理对象的轻量级版本,作为单元测试中被测试方法的输入 来自托管对象的代码示例。例

为什么在单元测试中尝试使用核心数据管理对象XCode生成的类时会出现“无法识别的选择器”

也就是说,在测试用例中,我必须将方法路径设置为核心数据管理对象的实例(我使用的是Xcode 4生成的管理对象)。为了帮助保持测试的轻量级,我可以自己创建对象(不使用核心数据框架)。但是,当我尝试使用属性时,我得到了“无法识别的选择器”

我想问题是:

  • 为什么我会得到这个“无法识别的选择器”
  • 我如何修改我正在做的事情,以创建核心数据管理对象的轻量级版本,作为单元测试中被测试方法的输入
  • 来自托管对象的代码示例。例如,在这里使用属性“title”会引发问题:

    @interface WEView : NSManagedObject {
      @private
    }
      @property (nonatomic, retain) NSString * title;
    @end
    
    
    #import "WEView.h"
    @implementation WEView
       @dynamic title;
    @end
    

    @dynamic
    预处理器命令告诉编译器将在运行时提供这些方法。托管对象上下文根据从托管对象模型获取的信息提供方法。如果没有上下文,类就没有实际的方法,也无法响应选择器

    感谢TechZen-关于如何修改我正在做的事情,以获得核心数据管理对象的轻量级版本,作为单元测试中被测试方法的输入,有什么想法/想法吗?(不涉及xcode生成的托管对象)我在存根上的测试从来没有太大的成功。你实际上只是创建了一些不一定会重现真实对象行为的假访问器。我更喜欢在专用测试项目中使用成熟的核心数据堆栈,也就是说,我将数据模型和类移动到自己的项目中,然后生成数据并在那里进行测试。我认为这是必要的,因为对象图是核心数据的真正核心,也是细微错误出现的地方。如果你没有一个真实的大对象图,那么你真的不能测试所有的东西。这样做很乏味,但确实会产生最好的效果。当你确信数据模型能够正常工作时,你就有了编写应用程序的真正勇气。好吧-但是,你在应用程序(非coredata组件)中重新测试了什么?i、 e.当你从你的核心数据方法(在他们自己的项目中)获得核心数据对象时,你会通过你的应用程序传递这些对象吗?在这种情况下,测试你的应用程序本身也需要你使用真正的核心数据类,我想也是这样吧?(或者,一旦你得到一个核心数据对象,你就把它的值复制到一个非核心数据类中,以便在应用程序中使用?)…是的,我在整个开发过程中都使用带有标签的虚拟信息的真正的核心数据堆栈。一旦确定了数据模型,应用程序就完成了80%。在处理UI时,测试不是特别有用,因为UI输入排列的数量太多。因此,我专注于测试数据模型。