2

我正在尝试在我的 UnitTest 之外创建我的 RKEntityMapping。我遇到的问题是它只有在我在测试中创建它时才有效。例如,这有效:

RKEntityMapping *accountListMapping = [RKEntityMapping mappingForEntityForName:@"CustomerListResponse"                                                            inManagedObjectStore:_sut.managedObjectStore];
[accountListMapping addAttributeMappingsFromDictionary:@{@"count":  @"pageCount",
                                                         @"page":   @"currentPage",
                                                         @"pages":  @"pages"}];

虽然以下内容现在可以工作。all to accoutListMapping 使用相同的托管对象存储完全返回上面显示的内容: RKEntityMapping *accountListMapping = [_sut accountListMapping];

RKEntityMapping中创建时,_sut我收到此错误:

<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.}

我假设nil它所指的目标对象是destinationObject:nil.

RKMappingTest *maptest = [RKMappingTest testForMapping:accountListMapping
                                          sourceObject:_parsedJSON
                                     destinationObject:nil];
4

4 回答 4

3

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

  • 单击您班级的 .m 文件
  • 打开实用工具工具栏(右侧的那个)
  • 在目标成员部分中勾选两个目标。

这是因为如果您的类没有测试目标的目标成员资格,则测试目标实际上会创建您创建的类的副本,这意味着它与主目标具有不同的二进制文件。这导致该类使用测试版本的 RestKit 二进制文件,而不是主要项目 RestKit。这将导致 isKindOfClass 方法在尝试查看您传递的映射是否属于主项目的 RKObjectMapping 类型时失败,因为它属于测试项目版本的 RestKit 的 RKObjectMapping 类型,因此您的映射不会被使用,然后你就会崩溃。

至少这是我对 LLVM 编译器如何工作的理解。我是 iOS 开发新手,所以如果我有什么问题,请随时纠正。

于 2014-08-05T13:00:46.423 回答
1

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

有关这方面的更多信息,请查看此答案

于 2014-05-25T22:24:08.850 回答
0

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

于 2013-11-09T09:17:05.977 回答
0

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

RestKitMappings+SomeClass

+ (RKObjectMapping*)responsemappings {
return mappings;
}

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

于 2014-01-16T19:26:59.073 回答