NSLayoutConstraint
項目をテストする場合、この行はコンパイルされません:AnyObject引数を持つ汎用XCTAssertEqual?
XCTAssertEqual(firstItem, view1)
Error: Cannot invoke 'XCTAssertEqual' with an argument list of type '(AnyObject, AnyObject)'
を、それはエラーや警告なしでコンパイルするために取得するには、私がしなければならない。
XCTAssertEqual(firstItem as? UIView, view1 as? UIView)
しかし、私はドンfirstItem
またはview1
のいずれかがUIView
またはUILayoutSupport
などになるかどうかを知ることはできません。
これをテストする一般的な方法はありますか?コンテキストのために、私は私が書いたテストヘルパーメソッドのこの内部
をやってる:
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)
}
}
'AnyObject'比較で' true'を返し、代わりに 'XCTAssertTrue'を使用する関数を作成したらどうでしょうか? – sschale
ありがとうございます。私はグーグルで速攻を比較し、任意のオブジェクト**を見つけて答えを見つけました。 – ma11hew28
SwiftHamcrestには別のオプションがあります: 'assertThat(firstItem、sameInstance(view1))' –