[英]Swift Unit test- How do I assert that a CGColor is what it's supposed to be?
Using Xcode V7.2. 使用Xcode V7.2。 Trying to unit test, need to verify that the correct color has been set, and get this message:
尝试进行单元测试,需要验证是否已设置正确的颜色,并收到以下消息:
Cannot invoke 'XCTAssertEqual' with an argument list of type '(CGColor, CGColor)'
How do I assert that a CGColor is what it's supposed to be? 我怎么断言CGColor是它应该是什么?
使用XCTAssert
并测试CGColorEqualToColor
是否为true。
As of Swift 3.0 / Xcode 8.0 CGColorEqualToColor also no longer works, it results in the error "CGColorEqualToColor is unavailable: use == instead". 从Swift 3.0 / Xcode 8.0开始CGColorEqualToColor也不再有效,导致错误“CGColorEqualToColor不可用:使用==代替”。
== or isEqual has the limitation that it: ==或isEqual有以下限制:
will return NO[/False] when comparing colors that are in different models/spaces (for instance #FFF with [UIColor whiteColor])
比较不同模型/空格中的颜色时会返回NO [/ False](例如#FFF与[UIColor whiteColor])
(From this SO answer ) which may not be the desired behaviour. (从这个SO答案 )可能不是所希望的行为。
It is cumbersome, but I break the colour down into its R/G/B/Alpha components and compare those, eg: 这很麻烦,但我将颜色分解为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)
EDIT: (adding this to your answer instead of creating a new answer :) 编辑:(将此添加到您的答案,而不是创建一个新的答案:)
Here's a UIColor extension for easier use: 这是一个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
}
}
and use it like this: 并像这样使用它:
XCTAssertTrue(cell.backgroundColor!.isEqualTo(.clear))
OR - you can use an Equatable function 或者 - 您可以使用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
}
and use it like this: 并像这样使用它:
XCTAssertTrue(cell.backgroundColor == UIColor.clear)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.