如何对私有 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 库进行单元测试?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Typescript 中对私有方法进行单元测试

特技使用CocoaPods管理私有库

组件化远程私有库解决方案(cocoapods基于git svn)----高级版

如何对私有 Windows 窗体进行单元测试?

如何在Typescript中对私有方法进行单元测试

如何使用私有构造函数对类进行单元测试?