2016-04-16 10 views
1

Ist es möglich, innerhalb eines laufenden Tests zu überprüfen, ob einer der XCTAssert s fehlerhaft ist? Ich habe einen Test mit einigen Behauptungen in einer Reihe, und ich möchte später etwas Code hinzufügen, um eine bestimmte Aktion auszuführen, wenn einer von ihnen schlug fehl:Überprüfen, ob ein XCTestCase-Test fehlgeschlagen ist

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

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

     if anyOfTheAboveAssertionsFailed { 
      performAction() 
     } 
    } 
} 

Der Teil I Tipps möchte, ist, dass anyOfTheAboveAssertionsFailed Zustand ohne die Vergleiche mit den hartcodierten Werten zu duplizieren.

Antwort

1

Während Ihre eigene Behauptung Methoden der Ausgabe des PO löst, es ist umständlich, wenn Sie mehrere XCAssert-Methoden verwenden müssen.

Ein anderer Ansatz besteht darin, continueAfterFailure zu überschreiben. Wenn kein Fehler auftritt, wird die Eigenschaft nicht angefordert. Wenn es eins gibt, wird es.

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

Bemerkt gibt es eine andere API Sie stattdessen für den gleichen Effekt außer Kraft setzen könnte: 'func recordFailure (withDescription Beschreibung: String, inFile filePath: String, Atline Zeilennummer: Int, erwartet: Bool)'. –

0

Sie könnte natürlich eine neue Funktion schreiben ...

func assertLessThanOrEqual(value: Double, limit: Double) -> Bool { 
    XCTAssertLessThanOrEqual(value, limit) 
    return value <= limit 
} 

Und dann wie Ihre Tests schreiben ...

var allGood = true 
allGood = allGood && assertLessThanOrEqual(someComputedValue1, 0.5) 
allGood = allGood && assertLessThanOrEqual(someComputedValue2, 0.2) 

if !allGood { 
    performAction() 
}