- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当使用 RKMappingTest
对 RestKit 映射代码执行单元测试时,它们会失败并出现以下异常:
映射操作失败:给定 nil 目标对象,无法实例化映射的目标对象。
或(当目标对象被传递到 RKMappingTest
时):
映射操作未在给定对象表示中找到属性和关系映射的任何可映射值
RestKit 使用以下 Podfile 通过 Cocoapods 安装:
target :MyTarget do
pod 'RestKit'
end
target :MyTargetTests do
pod 'RestKit/Testing'
pod 'RestKit/Search'
end
要测试的 RKMapping 在常规应用程序包中创建,并在使用 lldb 调试器的 po
命令时正确显示。
当生成 RKEntityMapping 的方法被复制粘贴到单元测试类并在那里执行时,一切正常。
虽然我确实回答了我自己的问题,希望它对遇到同样问题的其他人有用,但我鼓励任何能提出更好解决方案的人发布它。
最佳答案
Disclaimer:
I am no expert on static libraries, linking and related dependencies. If I got something wrong about the way that linking or Cocoapods work, please correct me.
为此Podfile
, Cocoapods 构建了两个静态库——每个目标一个。
项目编译时,MyTarget
中的所有代码将链接到 LibPods-MyTarget.a
库和 MyTargetTests
中的所有代码将链接到 LibPods-MyTargetTests.a
图书馆。
它们都包含 RestKit/ObjectMapping
的副本组件(因为它是 RestKit
和 RestKit/Testing
的依赖项)。
生成 RKMapping
时在应用程序源 (MyTarget) 中,来自 LibPods-MyTarget.a
的类实现被使用了。
当在单元测试类中使用该映射时,RestKit 实现从其他库链接。
理论上,两个实现都包含相同的源代码,两个类具有相同的名称、相同的类号,甚至可能是底层 objc_class
结构包含相同的内容。
当您从测试类中调用方法时,它将按预期执行(实现来自应用程序库)。说:根据分配初始化对象的位置,相同的源代码将从不同内存位置的不同副本加载。
但是,由于 Objective-C Class
构造比底层更高级别objc_class
结构,它们并不相同。
这意味着什么的例子:
假设我们有一个名为 MyObject
的类,其中包括具有以下签名的方法:
+ (RKObjectMapping*)generateMapping;
虽然方法本身工作得很好,但这个测试会失败:
- (void)testClassEquality {
RKEntityMapping *mappingFromAppBundle = [MyObject generateMapping];
Class testBundleMappingClass = [RKMapping class];
XCTAssert([mappingFromAppBundle isMemberOfClass:testBundleMappingClass],
@"Mapping class from app bundle doesn't match Mapping class from test bundle");
}
因为:
[RKMapping class]
来自 LibPods-MyTarget.a
!=
[RKMapping class]
来自 LibPods-MyTargetTests.a
RestKit 严重依赖 isMemberOfClass:
和 isSubclassOf:
实现其功能的操作。因此,这种重复的实现破坏了它。
不要为两个目标使用两种不同的 Cocoapod 配置。使用简单的 Podfile,例如:
pod 'RestKit'
pod 'RestKit/Testing'
pod 'RestKit/Search'
然后对两个目标使用相同的库/配置。针对两个目标的相同副本的链接器链接。
死代码剥离应该防止不需要的代码包含在您的最终应用程序中。
但是:它仍然需要在每次构建时编译,如果你有 -ObjC
或 -all_load
设置了链接器标志,未使用的代码将随您的应用一起发布。
I strongly advise against this, since it pretty much defeats the purpose of a unit test. I've seen this as another workaround and included it for the sake of completion:
将代码的实现复制并粘贴到单元测试类中,然后从那里使用它。
Cocoapods 首先为每个单独的组件创建一个静态库,然后将它们组合成一个更大的库,用于每个目标、项目或工作区。
应该可以在不使用大联合的情况下将小型库直接链接到目标中。通过这样做,在没有自动化的情况下,人们会杀死自动依赖管理,而 Cocoapods 正是为此而构建的。
如果有人有空并为此实现脚本或修改 Cocoapods 以添加功能,请告诉我。
如果我遗漏了 Cocoapods 已有的功能,或者您知道任何其他解决方案,请发表评论或将其发布为另一个答案。
关于ios - RestKit 和 Cocoapods : Mapping operation failed/did not find any mappable values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23860482/
我正在尝试从一个 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 m
我是 Haskell 的新手,我认为函数 map map和 map.map在 Haskell 中是一样的。 我的终端给了我两种不同的类型, (map.map) :: (a -> b) -> [[a]
我的目标是创建一个 map 的 map ,这样我就可以通过它的键检索外部 map 的信息,然后通过它们的键访问它的“内部” map 。 但是,当我得到每个内部映射时,我最初创建的映射变成了一个对象,我
如何使用 Java8 编写以下代码? for (Entry> entry : data.entrySet()) { Map value = entry.getValue(); if (valu
我有覆盖整个南非的图片。它们为Tiff格式,并已将坐标嵌入其中。我正在尝试拍摄这些图像(大约20张图像),并将它们用作我的iPhone应用程序中的地图叠加层。我的问题在于(准确地)将地图切成图块。 我
所以我有 2 std::map s >一个是“旧的”,一个是“新的”,我想知道哪些文件被删除了,这样就能够遍历差异并对 shared_ptr 做一些事情。这样的事情可能吗?如何做到? 最佳答案 虽然
是否可以将当前查看的 google.maps.Map 转换为静态图像链接,以便我可以获取图像并将其嵌入到 PDF 中? 我在 map 上添加了一些带有自定义图标的标记,所以我不确定这是否真的可行。 如
你能帮我吗 Java Streams ? 从标题可以看出我需要合并List>>进入Map> . 列表表示为List>>看起来像: [ { "USER_1":{
对于 idAndTags 的第二个条目,内部映射被打乱,但第一个条目则不然 第一次接近! for (Map.Entry> entryOne : idAndTags.entrySet()) {
我将从我的代码开始,因为它应该更容易理解我想要做什么: @function get-color($color, $lightness) { @return map-get(map-get($col
我过去曾在许多网站上使用过 Google map ,但遇到了以前从未遇到过的问题。 map 窗口正在显示,但它只显示左上角的 map 片段,以及之后的任何内容(即使我在周围导航时),右侧也不会加载任何
众所周知,这些 map ,无论是常规街道 map 还是卫星 map ,在中国的特定地区都无法正确排列。那么哪个 map 排列正确,是卫星 map 还是默认街道 map ?一些网站表明卫星 map 是正
在拖尾事件之后,我面临着获取此处 map 中的 map 边界的问题。我需要新的经纬度来在新更改的视口(viewport)中获取一些项目/点。我只是想在拖动结束时获得谷歌地图map.getBounds(
我想做的是通过 ajax API 显示以英国邮政编码为中心的小型 bing 生成 map 。我相信这是可能的;我在 Bing map 文档中找不到如何将英国邮政编码转换为可以插入 map Ajax 控
我有一个 List我想转换成的 e Map>其中外部字符串应为“Name”,内部字符串应为“Domain”。 Name Id Domain e(0) - Emp1, 1, Insuran
我的第 2 部分:https://stackoverflow.com/questions/21780627/c-map-of-maps-typedef-doubts-queries 然后我继续创建 I
是否可以在 1 行中使用 Java8 编写以下所有 null 和空字符串检查? Map> data = new HashMap<>(holdings.rowMap()); Set>> entrySet
我正在审查一个项目的旧代码,并使用 Map 的 Map 的 Map 获得了如下数据结构(3 层 map ): // data structure Map>>> tagTree
这可能是一种不好的做法,但我还没有找到更好的解决方案来解决我的问题。所以我有这张 map // Map>> private Map>> properties; 我想初始化它,这样我就不会得到 Null
我们在 JDK 1.7 中使用 HashMap,我在使用 SonarQube 进行代码审查时遇到了一些问题。 请考虑以下示例: public class SerializationTest imple
我是一名优秀的程序员,十分优秀!