Wenn NSLayoutConstraint
Elemente testen, diese Linie nicht kompiliert:Generic XCTAssertEqual mit AnyObject-Argumenten?
XCTAssertEqual(firstItem, view1)
Error: Cannot invoke 'XCTAssertEqual' with an argument list of type '(AnyObject, AnyObject)'
es ohne Fehler oder Warnungen zu kompilieren zu erhalten, habe ich zu tun:
XCTAssertEqual(firstItem as? UIView, view1 as? UIView)
Aber ich don weiß nicht, ob entweder firstItem
oder ein UIView
oder ein UILayoutSupport
usw.
Gibt es also eine generische Möglichkeit, dies zu testen?
Für Kontext, ich mache das Innere einer Testhilfsmethode schrieb ich:
extension NSLayoutConstraint {
func assert(item view1: AnyObject, toItem view2: AnyObject? = nil, attribute attr1: NSLayoutAttribute, relatedBy relation: NSLayoutRelation = .Equal, attribute attr2: NSLayoutAttribute? = nil, multiplier: CGFloat = 1, constant c: CGFloat = 0) {
let attribute2: NSLayoutAttribute = view2 == nil ? .NotAnAttribute : (attr2 ?? attr1)
XCTAssertEqual(firstItem as? UIView, view1 as? UIView)
XCTAssertEqual(firstAttribute, attr1)
XCTAssertEqual(self.relation, relation)
XCTAssertEqual(secondItem as? UIView, view2 as? UIView)
XCTAssertEqual(secondAttribute, attribute2)
XCTAssertEqual(self.multiplier, multiplier)
XCTAssertEqual(constant, c)
}
}
Was ist, wenn Sie gerade eine Funktion erstellt haben, die bei einem 'AnyObject'-Vergleich' true' zurückgibt und stattdessen 'XCTAsertTrue' verwendet? – sschale
Danke. Ich googelte ** swift vergleichen anyobject ** und fand die Antwort. – ma11hew28
SwiftHamcrest bietet eine andere Option: 'assertThat (firstItem, selbeInstance (view1))' –