swift - 是否可以从 ui 测试中隐藏类

标签 swift xcode xcode-ui-testing

我有一些帮助类,如 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/

相关文章:

ios - 比较一个结构的两个值并在 UITableView swift 4.0 中获取额外的单元格

ios - 当我们退出应用程序而不终止应用程序 Swift 4 时,弹出窗口不会重新出现

ios - 彻底清除应用程序数据以进行干净构建?

ios - Xcode 用户界面测试 : staticTexts start with

xcode-ui-testing - 如何使用 Xcode UI 测试断言屏幕上无法命中被遮挡的 XCUIElement

ios - Xcode 7 UI 测试 : how to dismiss a series of system alerts in code

ios - UIImagePickerControllerReferenceURL 返回 nil,使应用程序崩溃

swift - 为什么在 Swift 中只使用类协议(protocol)?

c++ - #include <lib.h> 找不到符号,为什么?

Swift Firebase 按最后 10 个排序,然后显示 10 个新值