Экземпляр по умолчанию пользователя для модульного тестирования?

#swift #unit-testing #nsuserdefaults #userdefaults

#swift #модульное тестирование #nsuserdefaults #пользовательские ошибки

Вопрос:

У меня есть класс, который я хочу протестировать. Он использует UserDefaults в своей логике. Я знаю, что мне нужно ввести тестовый дубль, чтобы протестировать его, но я хочу сделать это без особых усилий.

Если возможно создать временный экземпляр UserDefaults, который действителен только во время модульного тестирования, это будет лучше всего. Или мне нужно в конечном итоге написать оболочку для издевательства?

Комментарии:

1. UserDefaults(suiteName: ) это тот, который я ищу?

Ответ №1:

Да, UserDefaults(suiteName: ) это то, что вы ищете. И вы можете объявить его в своих тестах следующим образом:

 private class MockUserDefaults : UserDefaults {
  
  convenience init() {
    self.init(suiteName: "MockUserDefaults")!
  }
  
  override init?(suiteName suitename: String?) {
    UserDefaults().removePersistentDomain(forName: suitename!)
    super.init(suiteName: suitename)
  }
  
}
 

Удаление постоянного домена полезно для предотвращения столкновения данных из некоторых предыдущих тестовых запусков.

А затем используйте его как обычно:

 MockUserDefaults.standard.setValue("Whatever", forKey: "SomeKey")