如何检查XCTestCase测试是否失败

时间:2016-04-16 02:02:05

标签: swift xctest xctestcase

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

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

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

        if anyOfTheAboveAssertionsFailed {
            performAction()
        }
    }
}

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

2 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:0)

你当然可以写一个新功能......

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