Модульное тестирование: эмулируйте, что у пользователя есть определенный календарь - PullRequest
0 голосов
/ 28 июня 2018

Мне нужно написать тесты для инициализации Date объектов, когда у пользователя есть, например, Буддистский календарь, и мой форматер будет иметь Григорианский календарь.

Функция инициализации даты:

internal let calendar = Calendar(identifier: .gregorian)
private let formatter = DateFormatter()

init?(dateValue: String?, format: String) {
    guard let dateValue = dateValue else {
        return nil
    }

    formatter.dateFormat = format
    formatter.calendar = calendar
    guard let date = formatter.date(from: dateValue) else {
        return nil
    }

    self.init(timeIntervalSince1970: date.timeIntervalSince1970)
}

Как настроить пользовательскую среду (календарь)? Как у пользователя, кроме григорианский календарь? Возможно ли это?

Спасибо

1 Ответ

0 голосов
/ 28 июня 2018

Вам необходимо добавить Calendar.Identifier в вашу init. Примерно так:

internal let calendar: Calendar
private let formatter = DateFormatter()

init?(dateValue: String?, format: String, calID: Calendar.Identifier = .gregorian) {
    guard let dateValue = dateValue else {
        return nil
    }

    self.calendar = Calendar(identifier: calID)
    formatter.dateFormat = format
    formatter.calendar = calendar
    guard let date = formatter.date(from: dateValue) else {
        return nil
    }

    self.init(timeIntervalSince1970: date.timeIntervalSince1970)
}

После этого, когда в модульных тестах вы начинаете свой класс, вы можете передать необходимый Calendar.Identifier

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