如何对私有Cocoapods库进行单元测试?

3

我正在尝试找出如何为我的私有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,则会抛出“没有这个模块'MyPodLib'”的错误。
1个回答

1

您可能希望测试与示例应用程序独立运行。如果是这种情况,请在您的pod spec中添加一个测试子规范并设置其源文件。

例如,假设您有一个Xcode项目,其中包含一个框架目标MyFramework和一个测试目标MyFrameworkTests。您的pod spec将如下所示:

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 spec 进行代码检查并运行单元测试,请执行 pod spec lint MyFramework.podspec

如果您的示例应用程序包含在您的 pod 中,您可以将应用主机添加到您的 podspec。CocoaPods 文档中有更多细节。


如果我想将我的私有库测试与应用程序测试一起运行,您会推荐哪种策略? - Zapko
1
CocoaPods文档(答案中的链接)指出:“如果您想使用不同的测试源和依赖项来描述您的Pod的不同部分,则可以选择在podspec中拥有多个测试规范。” - Jakub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接