Mar*_*ski 148 unit-testing ios cocoapods
我正在尝试针对我的项目中的类编写一些iOS逻辑测试,这些类使用podspec中某些库的功能.我正在使用Xcode中提供的标准单元测试包(尽管不是应用程序测试,只是单元测试).
例如,我使用魔法记录,我在podspec中链接了该库.它存在于我的工作区中的Pods项目中,并且当应用程序在模拟器或设备上运行时,可以按预期工作.当我尝试链接到测试使用Magical Record的对象时,我得到一个链接器错误,指出它无法从Magical Record中找到选择器.我已经尝试在我的逻辑测试包中更新我的HEADER_SEARCH_PATH,甚至将它硬编码到CocoaPods创建的headers目录中,但没有运气.
我可以对不使用CocoaPods库的类运行单元测试,没有问题.
我错了吗?我应该做其他事情让编译器看到CocoaPods库吗?
Kei*_*ley 224
CocoaPods 1.0已经改变了这个的语法.它现在看起来像这样:
def shared_pods
pod 'SSKeychain', '~> 0.1.4'
...
end
target 'Sail' do
shared_pods
end
target 'Sail-iOS' do
shared_pods
end
Run Code Online (Sandbox Code Playgroud)
Pre CocoaPods 1.0回答
你想要使用的是link_with来自你的Podfile.就像是:
link_with 'MainTarget', 'MainTargetTests'
Run Code Online (Sandbox Code Playgroud)
然后又跑pod install了.
Mar*_*ski 174
我通过查看我的应用程序的主要目标是如何从CocoaPods库接收设置来想出这个.CocoaPods包含一个名为Pods.xcconfig的.xcconfig文件.该文件包含所有标题搜索路径.
如果您在项目导航器中查看项目并单击"信息"选项卡,您将在顶部列出您的构建配置.如果您打开不同配置的显示三角形,您将在主目标下看到Pods.我不得不点击下拉菜单并将Pods添加到逻辑测试目标中.

我也有复制的设置$(inherited),并${PODS_HEADERS_SEARCH_PATHS}从我的主要目标和过下生成设置/ HEADER_SEARCH_PATHS将它们复制到逻辑测试目标.
最后,我必须在Link Binary中添加libPods.a,并为我的逻辑测试目标提供Libraries构建阶段.
希望这能够帮助别人.
Min*_*ing 53
我在这里找到了一个解决方案使用CocoaPods进行单元测试:
在Xcode中打开项目文件,然后选择Project(而不是目标),在右侧面板中,有一个名为Configurations的部分.在测试目标的"基于配置文件"列中选择"窗格".

JRV*_*JRV 18
我同意其他答案,说明有必要将库链接到测试目标.但是到目前为止,没有任何建议对我有帮助.正如@fabb在评论中写道:"在测试时,isSubclassOfClass:调用返回NO,它们应该返回YES.我可以解释这个的唯一原因是依赖关系确实链接到main和测试目标,以及测试目标的bundle loader加载主包,它无法决定采用哪个类." 我在此主题中遇到了所有先前建议的相同问题.
我开始工作的解决方案是更新我的Podfile以为我的主目标和我的测试目标定义特定的Pod:
target 'MyTarget' do
pod 'AFNetworking', '~> 2.5.0'
pod 'Mantle', '~> 1.5'
end
target 'MyTargetTests' do
pod 'OCMockito', '~> 1.3.1'
end
Run Code Online (Sandbox Code Playgroud)
即使我没有使用任何特定于测试的Pod ,也必须为我的测试目标指定一个Pod.否则CocoaPods不会在我的项目中插入必要的链接逻辑.
这个链接帮助我得出了这个结论.
我添加了:exclusive => true以避免应用程序测试目标中出现重复的符号错误.
target 'myProjectTests', :exclusive => true do
pod 'OCMock', :head
pod 'XCTAsyncTestCase', :git => 'https://github.com/iheartradio/xctest-additions.git'
end
link_with 'myProject', 'myProjectTests'
Run Code Online (Sandbox Code Playgroud)
当我将应用程序测试目标更改为逻辑单元测试目标时,会发生链接器错误.删除后:exclusive => true,一切都恢复正常.
target 'myProjectTests', do
pod 'OCMock', :head
pod 'XCTAsyncTestCase', :git => 'https://github.com/iheartradio/xctest-additions.git'
end
link_with 'myProject', 'myProjectTests'
Run Code Online (Sandbox Code Playgroud)
:exclusive => true声明外部的所有内容do...end都不应该链接到myProjectTests,这在应用程序测试目标中是合理的,但它会导致逻辑测试目标中的链接器错误.
小智 6
您可以根据@Keith Smiley解决方案使用link_with.
如果您有常用的pod和每个目标的详细信息,您可能需要使用"def"选项来定义pod组.并在后来的独家目标中使用"def".
def import_pods
pod 'SSKeychain'
end
target 'MyProjectTests', :exclusive => true do
import_pods
end
target 'MyProject', :exclusive => true do
import_pods
pod 'Typhoon'
end
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我将'SSKeychain'添加到两个目标,并将'Typhoon'添加到'MyProject'目标
我对这个问题的解决方案是改变我的Podfile以在这两个目标中包含库
target "MyApp" do
pod 'GRMustache', '~> 7.0.2'
end
target "MyAppTests" do
pod 'GRMustache', '~> 7.0.2'
end
Run Code Online (Sandbox Code Playgroud)
由于我使用swift,我还必须配置测试目标以包含该MyApp-Bridging-Header.h文件.(在Build Settings选项卡下的Swift Compiler组中)
| 归档时间: |
|
| 查看次数: |
50615 次 |
| 最近记录: |