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

时间:2018-04-09 09:51:07

标签: 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)
    }
}

3 个答案:

答案 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 包混合以促进这一点,总的来说,我个人建议这样做,因为它可以缩短构建时间,并允许您通过细粒度访问控制使代码库更加模块化。

>