【问题标题】:Unit testing: Emulate that user has specific calendar单元测试:模拟用户有特定的日历
【发布时间】:2018-06-28 10:30:26
【问题描述】:

我需要为初始化Date 对象编写测试,例如,当用户有 Buddhist 日历并且我的格式化程序将有 Gregorian 日历时。

日期初始化函数:

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)
}

如何设置用户环境(日历)?像用户有 Gregorian 以外的日历?有可能吗?

谢谢

【问题讨论】:

    标签: ios swift unit-testing swift4


    【解决方案1】:

    您需要在初始化中添加 Calendar.Identifier。像这样的:

    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

    【讨论】:

    • 我知道,我可以把它传给课堂。但我需要模拟,该用户有另一个日历。换句话说,我需要下一个:Calendar.current == Calendar(identifier: .buddhist)。我需要这个条件在测试中为真
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多