Xcode-资产目录中的单元测试UIColor

问题描述 投票:0回答:2

我为Theme类编写了扩展,该扩展基于当前主题返回了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

我如何对从资产目录中检索到正确的颜色进行单元测试?

swift xcode unit-testing
2个回答
1
投票

我个人只是在测试中强行打开UIColor(named: "MainColor")!颜色以断言正在发生的正确行为(我们确实能够访问资产目录中所需的颜色)。如果我们无法访问此颜色,则会发生崩溃,在单元测试上下文中,实际上这是解决所有问题的理想方法。

我还将颜色的名称抽象为enum以确保仅在1个地方定义该名称,然后消除了在应用程序目标与测试目标之间命名不一致的可能性。

enum Colors: String { 
    case main = "MainColor" 
}

然后使用UIColor(named: Colors.main.rawValue)访问颜色。


1
投票

问题是MainColor这个名称是硬编码的,而且该颜色在您的资产目录中还是不在您的资产目录中,因此您无法在测试中控制该颜色。您需要将其抽象为一种方法,可以将测试中的颜色名称传递给该方法。

© www.soinside.com 2019 - 2024. All rights reserved.