【问题标题】:How do I unit test a private Cocoapods library?如何对私有 Cocoapods 库进行单元测试?
【发布时间】: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'”错误。

【问题讨论】:

    标签: swift unit-testing xctest swift5


    【解决方案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 中包含多个测试规范。 "
    猜你喜欢
    • 1970-01-01
    • 2017-09-11
    • 2021-12-14
    • 2010-09-20
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 2022-11-30
    相关资源
    最近更新 更多