2017-09-05 6 views
0

Ich habe eine Swift-Klasse, die für iOS nur etwas berechnet 11. Das bedeutet, dass ich die folgende Kontrolle haben:Wie kann ich mit Swift # verfügbar machen?

if #available(iOS 11, *) { 
    //do magic 
} 

Ich frage mich, wie ich #available für meine Unit-Tests spotten kann. Ich möchte testen:

  1. Wenn #available mit den richtigen Parametern aufgerufen
  2. Der Code innerhalb der if-Anweisung. Dafür hätte ich gerne eine Möglichkeit, das Ergebnis der Aussage if #available(iOS 11, *) zu erzwingen.

Update:

Da ich diese Schwierigkeiten hatte, änderte ich genähert und zog nach:

let result = device.systemVersion.compare("11", options: .numeric) 
return result == .orderedSame || result == .orderedDescending 

keine Antworten auf das Problem sehr geschätzt werden!

+1

Related [Testing API Verfügbarkeit Swift2.0] (https://sharpfivesoftware.com/2015/09/02/testing- api-availability-with-swift-2-0 /) –

+0

Hallo @ DávidPásztor, danke für den Artikel. Vielleicht habe ich den Artikel falsch verstanden, aber mit diesem Ansatz wäre ich nicht in der Lage, meine zwei Punkte zu testen, oder? Und mein SUT enthält diese if-Anweisung. Selbst wenn ich ein Strategieentwurfsmuster verwenden würde, wäre ich nicht in der Lage, die beiden erwähnten Punkte zu testen. Wenn ich falsch liege, können Sie gerne eine Antwort hinzufügen. –

+0

Wenn ich den letzten Hinweis in dem Artikel richtig gelesen habe, sollten Sie beim Festlegen des Build-Ziels für eine bestimmte iOS-Version die '# available'-Anweisungen in Ihren Tests ausführen. Ich habe es jedoch nicht getestet und kann daher nicht für seine Richtigkeit bürgen. –

Antwort

0

Da ich diese Schwierigkeiten hatte, änderte ich genähert und zog nach:

let result = device.systemVersion.compare("11", options: .numeric) 
return result == .orderedSame || result == .orderedDescending 
0

Sie könnten die Kontrolle auf eine Funktion wie folgt bewegen:

func isAvailable() -> Bool { 
    if #available(iOS 11, *) { 
     return true 
    } 
    else { 
     return false 
    } 
} 

Und sind dann diese Funktion in der Produktion Code, aber es in Tests verspotten.

Darüber hinaus könnten Sie dieser Funktion bei Bedarf Parameter hinzufügen.

+0

Danke für die Antwort. Mit diesem Ansatz wäre ich nicht in der Lage zu testen, ob "# verfügbar" in der Produktion aufgerufen wird. Ich müsste die '# available' Funktion selbst verspotten. Leider hatte ich kein Glück darin. –

Verwandte Themen