2016-04-13 8 views
2

Ich schrieb Komponententest. Eine Methode ist markiert, die nur iOS 9v unterstützt. Aber einige Methoden, die mit @available (iOS 9.0, *) markiert sind, werden auf Geräten mit iOS 8.4.1 ausgeführt. Wenn diese Methode ausgeführt wird, wird die Ausführung des Komponententests abgebrochen.Methoden mit @available (iOS 9.0, *) wird auf 8.x ausgeführt

Warum Unit Test Ausführen foo() -Funktion auf iOS 8.x, wenn es für iOS 9.x markiert ist?

@available(iOS 9.0, *) 
class func foo() { 
    // Some code... 
    if !TargetUtility.isRunningSimulator { 
     // Crash happens when executed on iOS 8.4.1 
     parameters[kSecAttrTokenID] = kSecAttrTokenIDSecureEnclave 
    } 
} 

// In the test file: 

@available(iOS 9.0, *) 
func testFoo() { 
    MyClass.foo() 
} 
+1

Ich denke, dass das Testframework '@ available' für Testspezifikationen nicht berücksichtigt. Dann würde es einfach 'MyClass.foo()' aufrufen, was es zum Absturz bringen würde. Könnten Sie versuchen, "@ available" in den Methodenkörper zu verschieben, z. 'guard #available (iOS 9.0, *) elder return'? – Sulthan

+0

@Sultan Sie haben Recht. Könnten Sie Ihre Antwort posten? – Ramis

Antwort

1

Die Test-Framework wahrscheinlich ehrt nicht @available für Testdefinitionen. Das könnte durch die Tatsache verursacht wird, dass XCUnit ist ein Objective-C-Framework und es im Wesentlichen greift nur alle Methoden, beginnend mit test...

Verschieben der @available Prüfung zur Laufzeit sollte es tun, zum Beispiel:

guard #available(iOS 9.0, *) else { 
    print("Test skipped") 
    return 
} 

Leider hat XCUnit keine Unterstützung für das Überspringen von Tests.

Verwandte Themen