如何让测试导航器忽略无测试用例的UI测试辅助类?
解决XCTest基类出现在测试导航器的问题
我来给你几个实用的方案,帮你把UnlockedTestCase这类测试基类从测试导航器里移除,让它不再被当成可执行的测试类:
方案1:代码层面标记(推荐)
在你的基类中重写allTests属性,返回一个空数组。XCTest框架会通过这个属性识别类中的测试方法,空数组会告诉框架这个类没有可执行的测试用例,自然就不会出现在导航器里了。
示例代码:
class UnlockedTestCase: XCTestCase { var app = XCUIApplication() override func setUp() { super.setUp() continueAfterFailure = false app.launchArguments = ["uiTesting", "unlock"] app.launch() } // 关键:返回空数组,标记该类无测试用例 override class var allTests: [(String, (UnlockedTestCase) -> () throws -> Void)] { return [] } }
方案2:通过Xcode测试计划排除
如果你使用了Xcode的测试计划(Test Plan),可以直接在界面操作排除这个基类:
- 打开你的测试计划文件(
.xctestplan) - 切换到「Tests」标签,找到
UnlockedTestCase - 右键点击它,选择「Exclude from Test Plan」
这样这个类就不会出现在测试导航器和测试执行列表里了,同时子类依然可以正常继承它的功能。
方案3:重写默认测试套件
另一种代码方式是重写defaultTestSuite属性,返回一个空的测试套件,同样能让测试导航器忽略这个类:
class UnlockedTestCase: XCTestCase { var app = XCUIApplication() override func setUp() { super.setUp() continueAfterFailure = false app.launchArguments = ["uiTesting", "unlock"] app.launch() } override class var defaultTestSuite: XCTestSuite { // 返回一个空的测试套件,框架不会识别它为可执行测试类 return XCTestSuite(name: "UnlockedTestCase_BaseClass") } }
这几个方案都不会影响子类继承基类的setUp方法和其他配置,完全满足你的测试需求。
内容的提问来源于stack exchange,提问作者Daniel Klöck
相关产品推荐
相关产品推荐

