我有一个UI测试,如下:
func testHome(){
if(isRedOrange.clear()){
//code
}
}
我该如何从我的UI测试中访问isRedOrange.swift文件中的isRedOrange.clear功能?
我有一个UI测试,如下:
func testHome(){
if(isRedOrange.clear()){
//code
}
}
UI测试是黑盒测试,因此您无法访问代码。
您可以在单元测试中使用@testable import
,这样就可以提供完全访问权限。
但是,在运行UITests时,这种方法不起作用,因为在UITest期间,您的测试类不能访问应用程序的代码。
来自Apple文档:
UI测试在根本上与单元测试不同。单元测试使您能够在应用程序的范围内工作,并允许您使用完全访问应用程序变量和状态的函数和方法。 UI测试以用户相同的方式练习您的应用程序UI,而没有访问应用程序的内部方法、功能和变量。这使得您的测试能够像用户一样查看应用程序,暴露用户遇到的UI问题。
您必须使用元素上的.tap()
来完成所有操作。.accessibilityIdentifier
将帮助您获取正确的元素。
import UIKit
导入模块UIKit
的方式相同,您将使用@testable import YOUR_APP
来导入您的主目标。此外,如果您只有一个全局函数func clear()
,则只需使用clear()
调用它,而不需要在Swift中调用文件名。 - S2dentNSOpenPanel
以在UI测试中提供一致的输出,因此我定义了一个协议并扩展了NSOpenPanel
来采用它。我还在我的UI测试目标中定义了一个模拟类,该类也采用了该协议。协议定义需要对应用程序和UI测试都可用。我只是将协议移动到自己的源文件中,并将其“目标成员资格”设置为应用程序和UI测试。 - Nicolas MiariNSOpenPanel
或模拟其行为和返回的URL)。应用程序代码确实无法从UI测试目标访问。这完全有道理,因为UI测试基于macOS的可访问性功能... - Nicolas Miari