You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让测试导航器忽略无测试用例的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:14:52