如何对私有 Cocoapods 库进行单元测试?
Posted
技术标签:
【中文标题】如何对私有 Cocoapods 库进行单元测试?【英文标题】:How do I unit test a private Cocoapods library? 【发布时间】:2020-01-27 07:34:08 【问题描述】:我正在尝试了解如何为我的私有 cocoapod 库设置单元测试。
这是预期的结果:
我在“Pods”项目中添加了一个单元测试目标“MyPodTests”,然后我将目标更改为我的“MyPodTests”方案。然后我为我的单元测试创建了测试类。我现在可以选择我的“MyPodLib”方案并按 CMD+U 并且测试目标执行测试。这是我正在寻找的行为。
但是,这种方法有一些缺点。如果我在示例应用程序上执行“pod update”或“pod install”,测试目标就消失了。如果我在我的示例应用程序上调用 pod update,测试也会消失。我确定有正确的方法可以做到这一点。另外,我想防止测试类被加载到使用该库的任何消费者中,因此我在我的 podspec 中添加了一个排除项:
s.exclude_files = 'Pod/Classes/**/Test/*'
当我选择 MyPodLib 并按 CMD+U 时没有任何反应,如果我选择 MyPodTests 并按 CMD+U 则会抛出“No such module 'MyPodLib'”错误。
【问题讨论】:
【参考方案1】:您可能希望测试独立于您的示例应用程序运行。如果是这种情况,请在您的 pod 规范中添加一个测试子规范并设置其源文件。
例如,假设您有一个带有框架目标 MyFramework 和测试目标 MyFrameworkTests 的 Xcode 项目。您的 pod 规格将如下所示:
Pod::Spec.new do |s|
s.name = "MyFramework"
s.version = "1.0.0"
s.summary = "Summary of what MyFramework does"
s.homepage = "https://www.website.com"
s.license = :type => "MIT", :file => "LICENCE.txt"
s.author = "Ramesh Boosa"
s.platform = :ios, "11.0"
s.swift_versions = ["5.0", "5.1"]
s.source = :git => "https://github.com/MyName/MyFramework.git", :tag => "v#s.version"
s.source_files = "MyFramework/*.swift"
s.test_spec do|test|
test.source_files = "MyFrameworkTests/*.swift"
end
end
要检查您的 pod 规范并运行您的单元测试,请执行 pod spec lint MyFramework.podspec
。
如果您的示例应用包含在您的 pod 中,您可以将应用主机添加到您的 podspec。 CocoaPods documentation 有更多详细信息。
【讨论】:
如果我想将我的私有库测试与我的应用测试一起运行,你会推荐什么策略? CocoaPods 文档指出(答案中的链接):“如果您想用不同的测试源和依赖项来描述 pod 的不同部分,您可以选择在 podspec 中包含多个测试规范。 "以上是关于如何对私有 Cocoapods 库进行单元测试?的主要内容,如果未能解决你的问题,请参考以下文章