2016-04-16 4 views
1

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

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

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

     if anyOfTheAboveAssertionsFailed { 
      performAction() 
     } 
    } 
} 

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

ответ

1

При использовании собственных методов утверждение решает вопрос в ЗП, его является громоздким, если вам нужно использовать несколько методов 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 
    } 
} 
+0

Заметили, есть другой API можно переопределить вместо этого для того же эффекта: 'FUNC recordFailure (описание withDescription: String, входной_файл Filepath: String, ATLINE LINENUMBER: Int, ожидается: Bool)'. –

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