我有一些帮助类,如 UnlockedTestCase
为特殊场景测试配置我的应用程序。
这些类在没有测试的情况下显示在测试导航器中。
有没有办法将它们标记为“非测试类”,以便测试导航器忽略它们?
更新:示例代码:
class UnlockedTestCase: XCTestCase {
var app = XCUIApplication()
override func setUp() {
super.setUp()
continueAfterFailure = false
app.launchArguments = ["uiTesting", "unlock"]
app.launch()
}
}
然后将测试写为:
class UnlockedUITests: UnlockedTestCase {
func testButton() {
XCTAssers(app.buttons["SomeButtonInTheUnlockedState"].exists)
}
}
最佳答案
不,没有办法在不失去定义 setUp()
的便利性的情况下从测试导航器中排除这种类。 ,因为它发现测试用例类的方式很简单,并且从导航器的角度来看,您可以随时将测试用例添加到父/助手类,因为它是 XCTestCase
后裔。
没有“helper”或“abstract-only”类的协议(protocol)以您需要的方式支持继承,因为自动发现和使用测试和测试钩子(Hook)(如 setUp()
)需要从 XCTestCase 继承。 .
如果您真的想从测试导航器中删除您的帮助实体,您可以将它们抽象为带有扩展的协议(protocol) where Self: XCTestCase
(允许您在扩展中访问 XCTestCase 的接口(interface)),让您的测试类符合它们,并覆盖 setUp()
在你的测试所在的类(class)。
protocol UnlockableTest {}
extension UnlockableTest where Self: XCTestCase {
func unlockSetUp() {
continueAfterFailure = false
app.launchArguments = ["uiTesting", "unlock"]
app.launch()
}
}
class UnlockedUITests: XCTestCase, UnlockableTest {
var app = XCUIApplication()
override func setUp() {
super.setUp()
unlockSetUp()
}
func testButton() {
XCTAssert(app.buttons["SomeButtonInTheUnlockedState"].exists)
}
}
但是,我认为您当前方法的简单性和便利性是更可取的折衷方案。协议(protocol)也不能包含存储属性,因此为了获得存储属性的好处,您需要添加
app
属性(property)给每个 XCTestCase
子孙也。
关于swift - 是否可以从 ui 测试中隐藏类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49730088/