2014-09-08 7 views
10

Ich weiß, dass es eine Reihe von Fragen dazu gibt, wie der Objekttyp mit Swift ermittelt werden kann.Swift zu schlau? Überprüfen eines Objekttyps beim Testen mit XCTest

Zum Beispiel: How do you find out the type of an object (in Swift)?

Der Grund, dass ich die Art finden wollen, ist so, dass ich testen, dass die richtige Sache innerhalb einer Unit-Test zurückgegeben. Die Prämisse ist, wenn jemand es jemals ändert, wird der Test fehlschlagen, und wir werden wissen, vorsichtiger zu sein.

Swift verfügt über die is-Methode, die einen booleschen Wert zurückgibt, ob ein Objekt von einem bestimmten Typ ist. Ich würde gerne verwenden, und behaupte dann, dass die Antwort wahr ist.

Wie hier skizziert (http://www.raywenderlich.com/74138/swift-language-faq) jedoch in der Praxis gezeigt .. Dies wirft einen Fehler auf:

error: 'is' test is always true

Der Punkt ist, dass es stimmt jetzt wieder .. und ich schreibe einen Test, so dass diese ist immer der Fall. Dummer schnell.

Irgendwelche Ideen, wie ich den Typ einer Antwort mit XCTest und swift testen kann?

Dank

Antwort

17

Um das zu umgehen Swift zu schlau zu sein, warf das Element, das Sie testen Any eingeben und dann testen. Zum Beispiel, wenn Sie, dass die Funktion behaupten wollen fred() eine dieser kehrt Int

func fred() -> Int { 
    return 3 
} 

assert((fred() as Any) is Int) 

Versuchen in einem Spielplatz, und dann die Rückkehr Typ Float und die Assertion wird sich ändern abzufeuern.

+0

Clever, wenn auch etwas hacky. Vielen Dank ! –

0

Wenn Sie explizite Typen in Ihren Let-Deklarationen haben, brauchen Sie vielleicht nichts Komplexeres zu tun?

Sicher, es wird Ihre Tests von der Kompilierung halten anstatt zu versagen, wenn sie ausgeführt werden. Aber es kommuniziert dasselbe "Etwas in diesem Test ist nicht mehr wie erwartet!"

Verwandte Themen