Как изменить системную дату и время до запуска теста [XCTest, swift]
Понятия не имею, как изменить системную дату и время до запуска теста на реальных устройствах или симуляторе. Не могли бы вы помочь мне?
1 ответ
Я не думаю, что вы можете изменить системное время. Что вы можете сделать, так это предоставить свой собственный класс, который возвращает даты, и использовать его везде вместо класса Date. В своем пользовательском классе вы сможете выбрать либо время тестирования, либо системное время, в зависимости от того, тестируете вы или нет.
Если вы сделаете это, ваш код в приложении будет выглядеть примерно так let now = CustomDate()
вместо let now = Date()
,
На этот вопрос уже есть ответ для Objective-C здесь: Установить дату / время iPhone в приложении для целей тестирования?,
Вот простой способ сделать это в Swift.
class CustomDate {static var dateOverride: Date?
static func get() -> Date {
return dateOverride ?? Date()
}
}
Тогда вместо использования
Date()
, используйте
CustomDate.get()
в вашем приложении.
В вашем тестовом коде установите
CustomDate.dateOverride
на все, что вам нравится, и вы сможете имитировать изменения системной даты в своем приложении. Однако в коде приложения никогда не устанавливайте dateOverride, чтобы избежать неожиданного поведения.