1

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

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

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

        if anyOfTheAboveAssertionsFailed {
            performAction()
        }
    }
}

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

4

2 回答 2

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
    }
}
于 2018-01-24T05:55:21.027 回答
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()
}
于 2016-04-16T02:07:04.107 回答