Можно ли в ходе текущего теста проверить, не удалось ли какой-либо из его XCTAssert? У меня есть тест с несколькими утверждениями подряд, и я хочу позже добавить код для выполнения определенного действия, если какое-либо из них не удалось:

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

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

        if anyOfTheAboveAssertionsFailed {
            performAction()
        }
    }
}

Часть, по которой я хотел бы получить советы, - это условие anyOfTheAboveAssertionsFailed без дублирования сравнений с жестко заданными значениями.

1
Stephen 16 Апр 2016 в 05:02

2 ответа

Лучший ответ

Хотя использование ваших собственных методов утверждения решает проблему заказа на поставку, это обременительно, если вам нужно использовать несколько методов 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
Johan Segerfeldt 24 Янв 2018 в 05:55

Конечно, вы могли бы написать новую функцию ...

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()
}
0
nhgrif 16 Апр 2016 в 02:07