使用 CocoaPods 进行测试

<测试规范

从 CocoaPods 1.3.0 开始,pod 现在可以提供测试规范(或简称测试规范)。测试规范可用于描述给定 pod 的测试源。

以下是定义测试规范的假想库 CoconutLib.podspec 的示例

Pod::Spec.new do |s|
  s.name         = 'CoconutLib'
  s.version      = '1.0'
  s.authors      = 'Coconut Corp', { 'Monkey Boy' => '[email protected]' }
  s.homepage     = 'http://coconut-corp.local/coconut-lib.html'
  s.summary      = 'Coconuts For the Win.'
  s.description  = 'All the Coconuts'
  s.source       = { :git => 'http://coconut-corp.local/coconut-lib.git', :tag => 'v1.0' }
  s.license      = {
    :type => 'MIT',
    :file => 'LICENSE',
    :text => 'Permission is hereby granted ...'
  }
  s.source_files        = 'Classes/*.{h,m}'

  s.test_spec 'Tests' do |test_spec|
    test_spec.source_files = 'Tests/*.{h,m}'
    test_spec.dependency 'OCMock' # This dependency will only be linked with your tests.
  end  
end

在使用方面,测试规范与子规范一样,但在生成的 Pods.xcodeproj 中的配置方式不同。测试规范源和依赖项不会包含在 CoconutLib 源中。如果你希望使用不同的测试源和依赖项来描述 pod 的不同部分,则可以选择在 podspec 中有多个测试规范。

Podfile 中,你可以这样引入测试规范

target 'MyApp' do
  use_frameworks!
  pod 'CoconutLib', '~> 1.0', :testspecs => ['Tests'] 
end

当你 pod install 时,这将在 Pods.xcodeproj 中为 CoconutLib pod 自动创建一个测试目标。你可以选择该方案并构建和运行你的测试!

<Linting

当你对 podspec 进行 linting 时,pod lib lintpod spec lint 现在支持自动构建和运行你的测试。例如,对 CoconutLib.podspec 进行 linting 将自动设置和运行由给定测试规范提供的测试。如果你想跳过此步骤,可以使用 --skip-tests 标志。

pod lib lint CoconutLib.podspec --skip-tests

<应用主机

在 CocoaPods 1.4.0 中,对测试规范添加了对应用主机的支持。如果你的测试需要应用主机才能正确执行,则可以在 podspec 中指定如下

  s.test_spec 'Tests' do |test_spec|
    test_spec.requires_app_host = true
    test_spec.source_files = 'Tests/*.{h,m}'
  end

请注意,CocoaPods 只会生成一个可供多个测试规范使用的应用主机。