如何检查 XCTestCase 测试是否失败

How to check if an XCTestCase test has failed

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

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

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

        if anyOfTheAboveAssertionsFailed {
            performAction()
        }
    }
}

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

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

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()
}

虽然使用自己的断言方法解决了 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
    }
}