我收到了一个错误:
Undefined symbols for architecture x86_64: "DirectBistro.DBTabBarOrderedIndexesKey.unsafeMutableAddressor : Swift.String", referenced from: DirectBistroUITests.TabBarControllerTests.setUp (DirectBistroUITests.TabBarControllerTests)() -> () in TabBarControllerTests.o ld: symbol(s) not found for architecture x86_64
这是我简单的UITest
课程:
import XCTest
@testable import DirectBistro
class TabBarControllerTests: XCTestCase {
override func setUp() {
super.setUp()
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject([], forKey: DBTabBarOrderedIndexesKey)
defaults.synchronize()
}
}
这是DBTabBarController.swift
:
let DBTabBarOrderedIndexesKey = "TabBarOrderedIndexesKey"
信息窗格:
常规窗格:
答案 0 :(得分:11)
结论是:它无法正常工作。
我向Apple报告这是一个错误,并得到了回复:
UI测试与单元测试的执行方式不同 - 单元测试在应用程序进程内运行,以便他们可以访问您的应用程序代码。 UI测试在应用程序之外的单独进程中执行,因此它们可以模拟用户与应用程序交互的方式。您不希望自己能够通过UI测试访问您的应用类。
答案 1 :(得分:1)
可以从您的UI测试访问应用程序代码。只需将源文件添加到UI测试目标中即可:
然后您可以从UI测试代码中访问该应用程序代码:
但是请记住,您正在访问的“应用程序代码”是在UI测试目标中运行的代码,而不是在实际应用中运行的代码。因此,请勿使用它来检查或修改应用程序状态。
答案 2 :(得分:1)
答案 3 :(得分:0)
我在运行测试用例时收到了类似的错误。我发现在我的测试用例中从主 iOS 应用程序项目的另一个文件中引用了某些字符串值。他们不能在这里访问。 我通过在我的测试用例方法中创建一个局部常量来解决它。您可以提出更好的方法。