使用Xcode V7.2。尝试进行单元测试时,需要验证是否设置了正确的颜色,并得到以下消息:
Cannot invoke 'XCTAssertEqual' with an argument list of type '(CGColor, CGColor)'
我如何断言CGColor应该是什么?
使用XCTAssert
并测试是否CGColorEqualToColor
正确。
从Swift 3.0 / Xcode 8.0开始,CGColorEqualToColor也不再起作用,它导致错误“ CGColorEqualToColor不可用:请使用==”。
==或isEqual具有以下限制:
比较不同模型/空间中的颜色时(例如,#FFF与[UIColor whiteColor]),将返回NO [/ False]
(根据此答案),这可能不是您期望的行为。
这很麻烦,但是我将颜色分解为R / G / B / Alpha分量并进行比较,例如:
var red1:CGFloat=0, green1:CGFloat=0, blue1:CGFloat=0, alpha1:CGFloat=0 colour1.getRed(&red1, green:&green1, blue:&blue1, alpha:&alpha1) var red2:CGFloat=0, green2:CGFloat=0, blue2:CGFloat=0, alpha2:CGFloat=0 colour2.getRed(&red2, green:&green2, blue:&blue2, alpha:&alpha2) XCTAssertEqual(red1, red2) XCTAssertEqual(green1, green2) XCTAssertEqual(blue1, blue2) XCTAssertEqual(alpha1, alpha2)
编辑:(将此添加到您的答案,而不是创建一个新的答案:)
这是一个UIColor扩展,更易于使用:
import UIKit extension UIColor { func isEqualTo(_ color: UIColor) -> Bool { var red1: CGFloat = 0, green1: CGFloat = 0, blue1: CGFloat = 0, alpha1: CGFloat = 0 getRed(&red1, green:&green1, blue:&blue1, alpha:&alpha1) var red2: CGFloat = 0, green2: CGFloat = 0, blue2: CGFloat = 0, alpha2: CGFloat = 0 color.getRed(&red2, green:&green2, blue:&blue2, alpha:&alpha2) return red1 == red2 && green1 == green2 && blue1 == blue2 && alpha1 == alpha2 } }
并像这样使用它:
XCTAssertTrue(cell.backgroundColor!.isEqualTo(.clear))
或-您可以使用Equatable函数
func ==(lhs: UIColor, rhs: UIColor) -> Bool { var lr: CGFloat = 0, lg: CGFloat = 0, lb: CGFloat = 0, la: CGFloat = 0 lhs.getRed(&lr, green:&lg, blue:&lb, alpha:&la) var rr: CGFloat = 0, rg: CGFloat = 0, rb: CGFloat = 0, ra: CGFloat = 0 rhs.getRed(&rr, green: &rg, blue: &rb, alpha: &ra) return lr == rr && lg == rg && lb == rb && la == ra }
并像这样使用它:
XCTAssertTrue(cell.backgroundColor == UIColor.clear)