2015-09-10 34 views
7

yılında Equatable türleri için çalışmıyor XCTAssertEqualaşağıdaki Swift sınıf Verilen Swift

func testExample() { 
    let a = TestObject(a: 4) 
    let b = TestObject(a: 4) 

    XCTAssertEqual(a, b) // fails 

    let isEqual = a == b 
    XCTAssert(isEqual) // passes  
} 

iki iddia dönüşü farklı değerler, ama ikisi de pas gerektiği .

Özel bir assert fonksiyonu yazma çalıştı:

func BAAssertEquatable<A: Equatable>(x1: A, _ x2: A, _ message: String, file: String = __FILE__, line: UInt = __LINE__) { 
    let operandsEqual = (x1 == x2) 
    XCTAssert(operandsEqual, message, file: file, line: line) 
} 

ancak bu da başarısız:

BAAssertEquatable(a, b, "custom assert") // fails 

Burada neler oluyor? Örneğin, == yerine isEqual numaralarını

+0

+1 test girişinizi yapacaktır. Maalesef yalnızca sorunu tahmin edebilir ve daha fazla analiz önerebilirim. Benim için bir yerde hızlı bir şekilde 'TestObject' ekolaylabilir Protokolü uyguladığı bilgileri kaybeder gibi görünüyor. Operatör fonunuza 'baskı' ekleyebilir misiniz? Söz konusu davalarda bunun yapılmasını beklemiyorum. Ayrıca 'func ==' önünde bir şekilde 'geçersiz kılma' beklerdim. Üzgünüm şu anda daha iyi olamam. – jboi

+0

@jboi Haklısınız - == operatörü sadece bir kez çağrılıyor (testExample'de doğrudan aramada), ancak üç kez çağrılmalıdır. Üst düzeydeki geçersiz kılma anahtar sözcüğünü kullanamıyorum (sözdizimi hatası). – Bill

+0

Bunun hata/sorunla ilgili olduğunu düşünüyorum: http://stackoverflow.com/questions/31099379/bug-with-equals-operator-and-nsobjects-in-swift-2-0 – Bill

cevap

3

XCTAssertEqual çağrıları. Bu, çok iyi bir analiz için

class TestObject: NSObject { 

    // ... 

    override func isEqual(object: AnyObject?) -> Bool { 
     guard let other = object as? TestObject else { return false } 
     return self == other 
    } 

}