【问题标题】:isKindOfClass doesn't match across targets when using a pod使用 pod 时,isKindOfClass 跨目标不匹配
【发布时间】:2014-10-13 17:36:08
【问题描述】:

我遇到了涉及isKindOfClass 检查的单元测试代码问题。关于这个主题有很多现有的问题,答案推荐:

  • 确保-ObjC 包含在“其他链接器标志”中。是的。
  • 确保项目目标中的.m 文件未添加到测试目标中。他们不是。
  • ...?

为了确保没有奇怪的情况,我创建了一个新项目。我:

  • 创建了一个“空应用程序”项目
  • 添加了一个引用 "TwistedOakCollapsingFutures" 的 PodFile
  • pod install
  • 打开工作区
  • 已验证 -ObjC 存在于两个目标中
  • 添加了将[TOCFuture futureWithResult:@1]返回到AppDelegate.m的方法
  • 在示例测试中添加了XCTAssert([AppDelegate.makeFuture isKindOfClass:TOCFuture.class], @"")
  • 运行单元测试(断言失败)

基本上我不知道为什么这不起作用。更奇怪的是,如果我 counter 反对现有答案并将AppDelegate.m 包含在测试目标中,则测试开始通过。

发生了什么事?我应该在测试目标中包含源文件,还是不应该包含?

【问题讨论】:

  • 之前已经看到,在一个应用程序中包含多个静态库,您可以获得多个给定类的类对象实例。
  • (我相信你需要做的是在静态库引用它之前以某种方式引用“主”代码中的类。)

标签: ios objective-c xcode unit-testing build-process


【解决方案1】:

这个答案为我解决了https://stackoverflow.com/a/27165120/2777364

简而言之,您不应该将 pod 与您的测试目标链接,您应该为测试目标创建与至少一个其他 pod 的单独链接,以强制生成配置集。

target 'MainTarget' do
    pod 'PodYouTryToTest'
end

target 'Tests' do
    pod 'AtLeastOneOtherPod'
end

上面的答案是解决这个问题的“正确方法”。作为一种快速解决方法,我可以提出一种方法:

Class getBundleDependentClass(Class class) { 
     return NSClassFromString(NSStringFromClass(class)); 
}

【讨论】:

  • 你用那个方法做什么?你把它当作一个类别吗?在 objc 中是什么样子的??
猜你喜欢
  • 1970-01-01
  • 2021-08-21
  • 2020-02-14
  • 2020-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多