2016-03-21 7 views
0

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) 
    } 
} 
+0

'AnyObject'比較で' true'を返し、代わりに 'XCTAssertTrue'を使用する関数を作成したらどうでしょうか? – sschale

+0

ありがとうございます。私はグーグルで速攻を比較し、任意のオブジェクト**を見つけて答えを見つけました。 – ma11hew28

+0

SwiftHamcrestには別のオプションがあります: 'assertThat(firstItem、sameInstance(view1))' –

答えて

関連する問題