Как изменить системную дату и время до запуска теста [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, чтобы избежать неожиданного поведения.

Другие вопросы по тегам