【问题标题】:Kiwi Spec Unit Test: Instance method '-attachToVerifier:verifier:' not foundKiwi Spec 单元测试:找不到实例方法“-attachToVerifier:verifier:”
【发布时间】:2011-12-15 18:18:53
【问题描述】:

我正在构建一些 Kiwi 测试并收到我无法解释的警告。我是 Kiwi 的新手。

我有一个模拟对象设置:

id conversationMock = [KWMock mockForProtocol:@protocol(Conversation)];
[conversationMock stub:@selector(end)];

在我的控制器中,有一个名为“conversation”的属性:

@interface MyController ()
@property (nonatomic, assign) id<Conversation> conversation;
@end

模拟被分配给属性,然后在规范中我检查是否在对话中调用了方法“end”:

it(@"should end conversation", ^{
  [[[myController.conversation] should] receive] end];
  [myController stopTalking];
});

编译器 (LLVM 3.0) 显示警告:“Instance method '-attachToVerifier:verifier:' not found”

这是什么原因?这是我需要解决的问题吗? (测试运行正常,检查结束的方法调用正常)

【问题讨论】:

    标签: objective-c cocoa-touch unit-testing tdd bdd


    【解决方案1】:

    将 id 类型转换为 NSObject 可以消除警告:

    [[(NSObject*)[myController.conversation] 应该] 接收] end];

    【讨论】:

    • 有同样的问题,这解决了问题。然而就没有别的办法解决了吗?这有点破坏了 Kiwi 相对于其他测试框架的易于阅读的优势。
    • 我还是喜欢 Kiwi,在过去的 6 个月里我一直在使用它,只是偶尔会遇到这个问题。不要让这个让你失望。
    • 我在尝试验证 id&lt;SomeProtocol&gt; 类型的对象时发现了这种情况,但它实际上导致了错误并且无法编译。投射到NSObject * 成功了,但很丑。
    【解决方案2】:

    你需要做的是:

    build settings -> Other Linker flags
    

    添加标志:-all_load

    【讨论】:

    • 我想赞成这个回复,但你能解释一下为什么需要这样做吗?
    • -attachToVerifier:verifier: 在文件 NSObject+KiwiVerifierAdditions - (id)attachToVerifier:(id)aVerifier 中定义在 NSObject 上的一个类别中;
      -attachToVerifier:verifier: 在编译时可见,因此应用程序编译正常。 LLVM 的警告是由于转换 id NSObject 据我所知,Objective-C 链接器不会加载仅包含类别的对象。 -all_load 强制链接器加载所有现有的目标文件,因此最终它将加载具有 attachToVerifier 的目标文件......希望这会有所帮助。
    • 首先尝试-ObjC,它只强制使用Objective-C代码从目标文件加载。这个标志过去没有用,-all_load 是解决方法(请参阅 Apple TN QA1490),但它现在似乎工作正常。 (我遇到了 OP 的错误,这个答案让我记忆犹新;我试过 -ObjC 并解决了问题。)
    • 在测试还是应用目标?
    【解决方案3】:

    根据@Komposr 的回答,我查看了我与 Kiwi 的几个项目,发现我需要执行以下操作:

    构建设置 -> 其他链接器标志

    添加标志:-ObjC

    注意不使用 CocoaPods。我已将 Kiwi 下载并编译为我所包含的静态库...

    【讨论】:

      猜你喜欢
      • 2016-07-21
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多