iOS/Swift:"No such module..." 用于 UI 测试
iOS/Swift: "No such module..." for UI Testing
我正在尝试为我的 iOS 应用程序创建自动化 UI 测试。在通常无法在我现有的应用程序上运行此功能后,我从头开始创建了一个新应用程序并在那里进行了尝试。它似乎总是失败,因为它无法导入我用 Cocoapods 安装的依赖项。
我目前 运行 XCode 版本 10.2.1 (10E1001)
复制说明:
- 启动 XCode,创建新项目(Single View App,Swift,单元测试和 UI 测试)。我将我的项目命名为
UITestProto
- 运行
pod init
在项目上。
- 添加
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
- 转到 XCode 中
UITestProtoUITests
目标的构建设置并将 "Always Embed Swift Standard Libraries" 设置为 $(inherited)
:
- 运行
pod install
- 使用
UITestProto.xcworkspace
打开项目
- 打开
UITestProtoUITests.swift
文件并尝试导入 OHHTTPStubs 模块。
import XCTest
import Hydra
class UITestProtoUITests: XCTestCase {
...
此时您应该看到错误:
No such module 'Hydra'
我试过:
- 添加
@testable import UITestProto
因为我必须为我的单元测试这样做
- 确保 "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 deintegrate
和pod 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
2021 年 XCode 12.3 的行为仍然相同。只需 运行 一次测试即可轻松修复。
我在将另一个 pod 添加到单元测试或 UI 测试时遇到了同样的问题。 podfile 在正确的目标部分中有 pod。所以它应该能识别它。
我 运行 测试 (Cmd+U
) 后错误就消失了
仅构建或 运行 是不够的,因为它不会尝试构建任何测试目标。
添加新模块时有时会出现同样的问题,class 等。但在构建 propper 目标后也会自行修复。
我正在尝试为我的 iOS 应用程序创建自动化 UI 测试。在通常无法在我现有的应用程序上运行此功能后,我从头开始创建了一个新应用程序并在那里进行了尝试。它似乎总是失败,因为它无法导入我用 Cocoapods 安装的依赖项。
我目前 运行 XCode 版本 10.2.1 (10E1001)
复制说明:
- 启动 XCode,创建新项目(Single View App,Swift,单元测试和 UI 测试)。我将我的项目命名为
UITestProto
- 运行
pod init
在项目上。 - 添加
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
- 转到 XCode 中
UITestProtoUITests
目标的构建设置并将 "Always Embed Swift Standard Libraries" 设置为$(inherited)
:
- 运行
pod install
- 使用
UITestProto.xcworkspace
打开项目
- 打开
UITestProtoUITests.swift
文件并尝试导入 OHHTTPStubs 模块。
import XCTest
import Hydra
class UITestProtoUITests: XCTestCase {
...
此时您应该看到错误:
No such module 'Hydra'
我试过:
- 添加
@testable import UITestProto
因为我必须为我的单元测试这样做 - 确保 "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 deintegrate
和pod 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
2021 年 XCode 12.3 的行为仍然相同。只需 运行 一次测试即可轻松修复。
我在将另一个 pod 添加到单元测试或 UI 测试时遇到了同样的问题。 podfile 在正确的目标部分中有 pod。所以它应该能识别它。
我 运行 测试 (Cmd+U
) 后错误就消失了
仅构建或 运行 是不够的,因为它不会尝试构建任何测试目标。
添加新模块时有时会出现同样的问题,class 等。但在构建 propper 目标后也会自行修复。