Swift Xcode-资源目录中的单元测试UIColor
我为我的主题类编写了一个扩展,它根据我当前的主题返回我的主颜色。我的单元测试涵盖了主题的变化,但我仍然有UIColor可选值的问题。我无法涵盖UIColor无法从我的颜色目录返回我的特定颜色的情况Swift Xcode-资源目录中的单元测试UIColor,swift,xcode,unit-testing,Swift,Xcode,Unit Testing,我为我的主题类编写了一个扩展,它根据我当前的主题返回我的主颜色。我的单元测试涵盖了主题的变化,但我仍然有UIColor可选值的问题。我无法涵盖UIColor无法从我的颜色目录返回我的特定颜色的情况 extension Theme { var mainColor: UIColor { switch self { case .system: if let color = UIColor(named: "MainColor") {
extension Theme {
var mainColor: UIColor {
switch self {
case .system:
if let color = UIColor(named: "MainColor") {
return color
} else {
return .clear
}
case .custom:
return .yellow
}
}
}
我也使用了这行代码,而不是展开可选代码,但它也不起作用
return UIColor(named: "MainColor") ?? .clear
如何进行单元测试以确保从资产目录中检索到正确的颜色?问题在于名称MainColor是硬编码的,并且该颜色在资产目录中或不在资产目录中,您无法在测试中控制该颜色。您需要将其抽象为一个方法,您可以将测试中的颜色名称传递给该方法 问题在于名称MainColor是硬编码的,该颜色在资产目录中或不在资产目录中,您无法在测试中控制该颜色。您需要将其抽象为一个方法,您可以将测试中的颜色名称传递给该方法 我个人会强制展开
UIColor(名为:“MainColor”)代码>我的测试中用于断言正确行为的颜色正在发生(我们确实能够访问资产目录中所需的颜色)。如果我们不能访问这个颜色,我们将得到一个崩溃,在单元测试上下文中,它实际上是隔离任何问题的理想方法
我还将颜色名称抽象为enum
,以确保名称仅定义在一个位置,然后消除应用程序目标和测试目标之间命名不一致的可能性
enum颜色:字符串{
case main=“MainColor”
}
然后使用UIColor(名为:Colors.main.rawValue)
访问颜色。我个人会强制展开UIColor(名为:“MainColor”)代码>我的测试中用于断言正确行为的颜色正在发生(我们确实能够访问资产目录中所需的颜色)。如果我们不能访问这个颜色,我们将得到一个崩溃,在单元测试上下文中,它实际上是隔离任何问题的理想方法
我还将颜色名称抽象为enum
,以确保名称仅定义在一个位置,然后消除应用程序目标和测试目标之间命名不一致的可能性
enum颜色:字符串{
case main=“MainColor”
}
然后使用UIColor(名为:Colors.main.rawValue)
访问颜色。:不要发布代码、数据、错误消息等的图像。我很难理解您试图实现的目标。如果找不到自定义颜色,是否返回默认颜色?显示主题声明。你声称这是一门课。那么,它是如何有案例可以打开的呢?到底什么是“隐式闭包”?这是一个无用测试的例子。您正在尝试测试UIKit框架本身以及资源是否可用(也称为构建设置)。代码也可以通过?
简化,并且代码将变得足够简单,正确性将显而易见。注意:不要发布代码、数据、错误消息等的图像。我很难理解您试图实现的目标。如果找不到自定义颜色,是否返回默认颜色?显示主题声明。你声称这是一门课。那么,它是如何有案例可以打开的呢?到底什么是“隐式闭包”?这是一个无用测试的例子。您正在尝试测试UIKit框架本身以及资源是否可用(也称为构建设置)。代码也可以用?
简化,代码将变得足够简单,正确性将显而易见。谢谢。我认为这是一个更好的方法。我会用的,谢谢。我认为这是一个更好的方法。我会用的。