iOS/Swift:"No such module..." 用于 UI 测试

iOS/Swift: "No such module..." for UI Testing

我正在尝试为我的 iOS 应用程序创建自动化 UI 测试。在通常无法在我现有的应用程序上运行此功能后,我从头开始创建了一个新应用程序并在那里进行了尝试。它似乎总是失败,因为它无法导入我用 Cocoapods 安装的依赖项。

我目前 运行 XCode 版本 10.2.1 (10E1001)

复制说明:

  1. 启动 XCode,创建新项目(Single View App,Swift,单元测试和 UI 测试)。我将我的项目命名为 UITestProto
  2. 运行 pod init 在项目上。
  3. 添加 HydraAsync 依赖项

Podfile 应如下所示:

# Uncomment the next line to define a global platform for your project
platform :ios, '12.2'

target 'UITestProto' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for UITestProto

  target 'UITestProtoTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'UITestProtoUITests' do
    inherit! :search_paths
    # Pods for testing
    pod 'HydraAsync'
  end
end
  1. 转到 XCode 中 UITestProtoUITests 目标的构建设置并将 "Always Embed Swift Standard Libraries" 设置为 $(inherited):

  1. 运行 pod install
  2. 使用UITestProto.xcworkspace
  3. 打开项目
  4. 打开 UITestProtoUITests.swift 文件并尝试导入 OHHTTPStubs 模块。
import XCTest

import Hydra

class UITestProtoUITests: XCTestCase {
...

此时您应该看到错误:

No such module 'Hydra'

我试过:

  1. 添加 @testable import UITestProto 因为我必须为我的单元测试这样做
  2. 确保 "Build Settings" 中的 "Enable Testability" 设置为 "Yes"

我已经清理了构建文件夹和 closed/open XCode,但在导入 Hydra 时仍然没有成功。

注意:我实际上并没有使用Hydra进行测试,它只是我过去在项目中成功使用的一个库

试试这个:

platform :ios, '12.2'

target 'UITestProto' do

  #some pods for your main target

  target 'UITestProtoTests' do
    inherit! :search_paths
    #pods for your unit tests
  end

  target 'UITestProtoUITests' do
    pod 'HydraAsync'
  end
end

和运行 pod deintegratepod update && pod install之后。

这与 CocoaPods issue. The workaround suggested here 对我有用。不过,您可能需要重建项目。

为了将来参考,我抄送了 post:

# Moving the UITests target outside of the main target 
# in the Podfile seems to have helped. So now instead of this:

target 'Target' do
  use_frameworks!
  ...

  target 'TargetTests' do
    inherit! :search_paths
    ...
  end

  target 'TargetUITests' do
    inherit! :search_paths
    ...
  end

end

## we have this:

target 'Target' do
  use_frameworks!
  ...

  target 'TargetTests' do
    inherit! :search_paths
    ...
  end
end

target 'TargetUITests' do
    inherit! :search_paths
    ... # all the pods we normally use
 end

感谢PWrzesinski

2021 年 XCode 12.3 的行为仍然相同。只需 运行 一次测试即可轻松修复。

我在将另一个 pod 添加到单元测试或 UI 测试时遇到了同样的问题。 podfile 在正确的目标部分中有 pod。所以它应该能识别它。

我 运行 测试 (Cmd+U) 后错误就消失了 仅构建或 运行 是不够的,因为它不会尝试构建任何测试目标。

添加新模块时有时会出现同样的问题,class 等。但在构建 propper 目标后也会自行修复。