【问题标题】:Skip multi tests in Xcode跳过 Xcode 中的多项测试
【发布时间】:2021-01-09 11:44:12
【问题描述】:

我正在我的 Swift 应用程序中编写单元测试。

我有一些我想跳过的测试,使用标志 shouldSkip,比如 -

if shouldSkip {
     throw XCTSkip()
}

问题是—— 我不希望所有测试都必须一遍又一遍地编写这一行+所有跳过的测试都需要标记为“跳过”(灰色箭头,不通过或失败)。

所以我想到了覆盖invokeTest 或使用setup 来跳过所有测试当true 中的标志时,类似于 -

override func setUp() {
        
        if shouldSkip {
          throw XCTSkip()
        } 
        super.setUp()
}

但我无法将测试标记为已跳过(仅通过或失败)

关于如何跳过(并标记为已跳过)大量测试(是否在同一个文件中)的任何想法?

我知道测试计划和方案,但我需要运行和跳过测试,而不是不运行测试。

【问题讨论】:

    标签: swift xcode unit-testing testing xctest


    【解决方案1】:

    你需要抛出XCTSkip,因为它是Error,简单地创建它对你的测试结果没有影响。

    或者您可以使用XCTSkipIf 函数,该函数在满足传入条件时跳过测试。

    因此,在您想跳过的测试中,只需致电XCTSkipIf(shouldSkip)。或者如果您想避免在所有测试中都编写它,您可以在setUpWithError 中进行,这是setup 的抛出变体。

    正确的方法不是if shouldSkip { XCTSkip() },而是XCTSkipIf(shouldSkip)if shouldSkip { throw XCTSkip() }

    使用这两种解决方案之一将正确地将测试标记为已跳过。

    有关详细信息,请参阅Methods for Skipping Tests 文档页面。

    【讨论】:

    • 但我不能在invokeTest()setup() 中使用try...
    • @ozd 有一个setup 的投掷变体,称为setUpWithError(),您需要使用它才能投掷。对于invokeTest,你是对的,你不能扔掉它。但是,正如我所说(并且正如文档明确指出的那样),如果您希望将测试标记为已跳过,则 需要抛出,因此 invokeTest 根本不是要跳过的正确函数你的测试来自。
    • OOOOO,我错过了setUpWithError() 我正在尝试使用invokeTest()!所以这很棒!关于 throw 部分,我实际上正在使用它,所以我编辑了我的问题说 throw 因为这不是我试图解决的问题。您能否编辑您的答案以讨论“将 `setUpWithError()' 与 throw 一起使用”,以便我接受?
    猜你喜欢
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 2017-05-31
    • 2014-09-03
    相关资源
    最近更新 更多