Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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
Unit testing UnitTests的RestKit实体映射不起作用_Unit Testing_Restkit_Restkit 0.20 - Fatal编程技术网

Unit testing UnitTests的RestKit实体映射不起作用

Unit testing UnitTests的RestKit实体映射不起作用,unit-testing,restkit,restkit-0.20,Unit Testing,Restkit,Restkit 0.20,我正在尝试在UnitTest之外创建RKEntityMapping。我的问题是,只有在我的测试中创建它时,它才会起作用。例如,这项工作: RKEntityMapping *accountListMapping = [RKEntityMapping mappingForEntityForName:@"CustomerListResponse" inManagedObjectStor

我正在尝试在UnitTest之外创建RKEntityMapping。我的问题是,只有在我的测试中创建它时,它才会起作用。例如,这项工作:

RKEntityMapping *accountListMapping = [RKEntityMapping mappingForEntityForName:@"CustomerListResponse"                                                            inManagedObjectStore:_sut.managedObjectStore];
[accountListMapping addAttributeMappingsFromDictionary:@{@"count":  @"pageCount",
                                                         @"page":   @"currentPage",
                                                         @"pages":  @"pages"}];
而下面的方法现在可以工作了。all to AccountListMapping使用相同的托管对象存储返回如上所示的内容: RKEntityMapping*accountListMapping=[\u sut accountListMapping]

当在
\u sut
中创建
RKEntityMapping
时,我得到以下错误:

<unknown>:0: error: -[SBAccountTests testAccountListFetch] : 0x9e9cd10: failed with error:
Error Domain=org.restkit.RestKit.ErrorDomain Code=1007 "Cannot perform a mapping operation
with a nil destination object." UserInfo=0x8c64490 {NSLocalizedDescription=Cannot perform
a mapping operation with a nil destination object.}

当您运行测试时,您没有使用整个映射基础结构,因此RestKit不会为您创建目标对象。它只会测试映射本身。因此,您需要向测试方法提供所有三条信息,否则它将无法工作。

运行测试时,您没有使用整个映射基础结构,因此RestKit不会为您创建目标对象。它只会测试映射本身。因此,您需要向测试方法提供所有三条信息,否则它将无法工作。

例如,我在映射对象上使用了一个类别

RestKitMappings+SomeClass

+ (RKObjectMapping*)responsemappings {
return mappings;
}

现在,这个类别也必须包含在测试目标中,否则映射将无法通过。

例如,我在映射对象上使用了一个类别

RestKitMappings+SomeClass

+ (RKObjectMapping*)responsemappings {
return mappings;
}

现在,这个类别也必须包含在测试目标中,否则映射将无法通过。

这个问题也可能是由重复的类定义引起的,当使用CoCoapod时,为多个目标单独包含RestKit组件


有关这方面的更多信息,请查看。

当使用CoCoapod时,将多个目标的RestKit组件单独包括在内时,重复的类定义也可能导致此问题


有关这方面的更多信息,请查看。

确保您创建的文件具有主目标和测试目标的目标成员身份。您可以通过以下方式找到:

  • 单击类的.m文件
  • 打开实用工具工具栏(右侧的一个)
  • 在目标成员资格部分,勾选两个目标
这是因为,如果您的类没有测试目标的目标成员身份,那么测试目标实际上会创建您创建的类的副本,这意味着它与主目标具有不同的二进制文件。这导致该类使用测试版本的RestKit二进制文件,而不是主项目RestKit。这将导致isKindOfClass方法在尝试查看您传递的映射是否为来自主项目的RKObjectMapping类型时失败,因为它是来自RestKit的测试项目版本的RKObjectMapping类型,因此您的映射不会被使用,并且您会崩溃


至少这是我对LLVM编译器工作原理的理解。我是iOS开发人员,因此如果我出错,请随时更正。

确保您创建的文件具有主目标和测试目标的目标成员身份。您可以通过以下方式找到:

  • 单击类的.m文件
  • 打开实用工具工具栏(右侧的一个)
  • 在目标成员资格部分,勾选两个目标
这是因为,如果您的类没有测试目标的目标成员身份,那么测试目标实际上会创建您创建的类的副本,这意味着它与主目标具有不同的二进制文件。这导致该类使用测试版本的RestKit二进制文件,而不是主项目RestKit。这将导致isKindOfClass方法在尝试查看您传递的映射是否为来自主项目的RKObjectMapping类型时失败,因为它是来自RestKit的测试项目版本的RKObjectMapping类型,因此您的映射不会被使用,并且您会崩溃


至少这是我对LLVM编译器工作原理的理解。我是iOS开发人员,因此如果我出错,请随时更正。

是的,因此请提供目标对象。如果我在测试中创建映射,则无论我是否提供目标对象,它都可以工作;RestKit文档不提供一个。如果我在另一个类中创建映射,并将其作为返回值传入,那么即使传入目标对象,它也不起作用;它找不到任何可映射的值。我认为这是RK中的一个错误。您是否尝试过调试您的两个案例?在RestKit google group或github wiki上询问可能更好。这与destinationObject参数无关。错误消息有点混乱,但它指的是无法创建目标对象的事实。我不知道为什么会这样,但我已经调试了它并提交了一个问题:是的,所以请提供一个目标对象;RestKit文档不提供一个。如果我在另一个类中创建映射,并将其作为返回值传入,那么即使传入目标对象,它也不起作用;它找不到任何可映射的值。我认为这是RK中的一个错误。您是否尝试过调试您的两个案例?在RestKit google group或github wiki上询问可能更好。这与destinationObject参数无关。错误消息有点混乱,但它指的是无法创建目标对象的事实。我不知道为什么会这样,但我已经调试了它,并提交了一个问题:我不确定这在我的案例中为什么会起作用。如果我在单元测试类中创建映射,则映射可以工作,但如果我在单元测试类之外创建完全相同的映射并将其作为返回值传入,则映射无法工作。要进行单元测试,我不想将所有映射复制并粘贴到单元测试中;太多的代码重复。此外,这种技术适用于对象映射,但不适用于实体映射。我不确定这在我的情况下有什么关系。如果我