2016-04-13 13 views
2

Birim testi yazdım. Yalnızca iOS 9v'yi destekleyen bazı yöntemler işaretlenir. Ancak, iOS 8.4.1 olan cihazda @available (iOS 9.0, *) ile işaretlenmiş bazı yöntemler çalıştırılır. Bu yöntem çalıştırıldığında birim test yürütmesi çöküyor.@ Kullanılabilir yöntemler (iOS 9.0, *) 8.x üzerinde çalıştırılır.

Neden birim testi iOS 9.x için işaretlendiğinde iOS 8.x'te foo() işlevi yürütülüyor?

@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

Test çerçevesinin, test tanımları için 'mevcut 'olduğunu onaylamadığını düşünüyorum. Sonra sadece çökmesini sağlayacak 'MyClass.foo()' yi çağırırdı. "Kullanılabilir" i, yöntem gövdesine, örneğin koruma #available (iOS 9.0, *) başkaları geri döndü? – Sulthan

+0

@Sulthan Haklısınız. Cevabınızı gönderir misiniz? – Ramis

cevap

1

test çerçevesi muhtemelen Test tanımları için @available dikkate almaz.

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

: O XCUnit bir Objective-C çerçevesidir ve aslında sadece hile, örneğin yapmalıyım çalışma süresiyle @available çek Hareketli test...

ile başlayan tüm yöntemleri kapmak gerçeği neden olabilir Maalesef, XCUnit testler için gerçekten destek almıyor.