我有一些辅助类,如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)
}
}
答案 0 :(得分:1)
假设以下结构:
MyTestHelperClassName: XCTestCase {
//... your helper methods
}
删除XCTestCase
的子类声明
即: XCTestCase
部分
然后它不会出现在Test Navigator
答案 1 :(得分:0)
不,没有办法从测试导航器中排除这种类而不会失去定义setUp()
的难易程度,因为它发现测试用例类的方式过于简单,并且从在导航器的视图中,您可以随时向父/助手类添加测试用例,因为它是XCTestCase
后代。
没有'helper'或'abstract-only'类的协议,它们以你需要的方式支持继承,因为XCTestCase的继承是自动发现和使用测试和测试钩子所需要的,例如{{1} }。
如果确实希望从测试导航器中删除辅助实体,则可以将它们抽象为扩展名为setUp()
的协议(以允许您在扩展中访问XCTestCase的接口) ),让你的测试类符合它们,并在测试所在的类中覆盖where Self: XCTestCase
。
setUp()
但是,我认为您当前方法的简单性和便利性是最好的折衷方案。协议也不能包含存储的属性,因此为了获得存储属性的好处,您还需要将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)
}
}
属性添加到每个app
后代。
答案 2 :(得分:0)
您现在可以使用 Swift 包执行此操作,如果您的测试在 Swift 包中,那么您可以拥有一个包含基类的辅助模块,并且这些不会作为空测试用例添加到侧边栏中。
您可以将 xcodeproj 与源文件夹的本地 swift 包混合以促进这一点,总的来说,我个人建议这样做,因为它可以缩短构建时间,并允许您通过细粒度访问控制使代码库更加模块化。
>