Xcode - Юнит-тестирование UIColor из каталога активов - PullRequest
0 голосов
/ 26 января 2020

Я написал расширение для своего класса Theme, которое возвращает мой mainColor на основе моей текущей темы. Мои модульные тесты охватывают изменения темы, но у меня все еще есть проблема с дополнительным значением UIColor. Я не могу описать ситуацию, когда UIColor не смог вернуть мой указанный цвет c из моего каталога цветов.

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

Как выполнить юнит-тестирование, чтобы правильный цвет был получен из каталога активов

Ответы [ 2 ]

1 голос
/ 26 января 2020

Я бы лично принудительно развернул UIColor(named: "MainColor")! цвет в моих тестах, чтобы утверждать, что происходит правильное поведение (что мы действительно можем получить доступ к нужному цвету в каталоге ресурсов). Если мы не сможем получить доступ к этому цвету, мы получим cra sh, который в контексте модульного тестирования на самом деле является желательным, чтобы изолировать любые проблемы.

Я бы также абстрагировал название цвета в enum чтобы убедиться, что имя определено только в 1 месте, исключается возможность именования несоответствий между целью приложения и целью тестирования.

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

Затем используйте UIColor(named: Colors.main.rawValue) для доступа к цвету.

1 голос
/ 26 января 2020

Проблема в том, что имя MainColor жестко запрограммировано, и либо этот цвет присутствует в вашем каталоге ресурсов, либо его нет, и вы не можете контролировать это в тесте. Вам нужно преобразовать это в метод, которому вы можете передать имя цвета из теста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...