【问题标题】:How to check if an XCTestCase test has failed如何检查 XCTestCase 测试是否失败
【发布时间】:2016-08-08 03:32:54
【问题描述】:

是否可以在正在运行的测试中检查其 XCTAsserts 是否失败?我有一个连续几个断言的测试,如果其中任何一个失败,我想在之后添加一些代码来执行特定操作:

class testClass : XCTestCase
{
    func testSomething()
    {
        let someComputedValue1 = func1()
        let someComputedValue2 = func2()

        XCTAssertLessThanOrEqual(someComputedValue1, 0.5)
        XCTAssertLessThanOrEqual(someComputedValue2, 0.2)

        if anyOfTheAboveAssertionsFailed {
            performAction()
        }
    }
}

我想要提示的部分是 anyOfTheAboveAssertionsFailed 条件,而无需重复与硬编码值的比较。

【问题讨论】:

    标签: swift xctest xctestcase


    【解决方案1】:

    虽然使用您自己的断言方法可以解决 PO 的问题,但如果您需要使用多个 XCAssert 方法,则很麻烦。

    另一种方法是覆盖continueAfterFailure。如果没有失败,则不会请求该属性。如果有的话,它会的。

    class MyTest: XCTest {
        private var hasFailed = false
        override var continueAfterFailure: Bool {
            get {
                hasFailed = true
                return super.continueAfterFailure
            }
            set {
                super.continueAfterFailure = newValue
            }
        }
        override func tearDown() {
            if hasFailed { performAction() }
            hasFailed = false
        }
    }
    

    【讨论】:

    • 注意到您可以覆盖另一个 API 以获得相同的效果:func recordFailure(withDescription description: String, inFile filePath: String, atLine lineNumber: Int, expected: Bool)
    【解决方案2】:

    你当然可以写一个新函数...

    func assertLessThanOrEqual(value: Double, limit: Double) -> Bool {
        XCTAssertLessThanOrEqual(value, limit)
        return value <= limit
    }
    

    然后编写您的测试,例如...

    var allGood = true
    allGood = allGood && assertLessThanOrEqual(someComputedValue1, 0.5)
    allGood = allGood && assertLessThanOrEqual(someComputedValue2, 0.2)
    
    if !allGood {
        performAction()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-27
      • 1970-01-01
      • 2013-08-30
      • 2013-08-26
      • 1970-01-01
      • 2016-11-13
      • 2014-01-30
      • 1970-01-01
      相关资源
      最近更新 更多