Swift Xcode-资源目录中的单元测试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") {

我为我的主题类编写了一个扩展,它根据我当前的主题返回我的主颜色。我的单元测试涵盖了主题的变化,但我仍然有UIColor可选值的问题。我无法涵盖UIColor无法从我的颜色目录返回我的特定颜色的情况

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框架本身以及资源是否可用(也称为构建设置)。代码也可以用
简化,代码将变得足够简单,正确性将显而易见。谢谢。我认为这是一个更好的方法。我会用的,谢谢。我认为这是一个更好的方法。我会用的。