Swift 5: 我在尝试实例化视图模型进行测试时遇到问题

Swift 5: I have a problem when I try to instantiate a viewmodel for testing

我正在尝试实例化我的视图模型以进行测试,在这种情况下我不需要它的参数,但是当它要求我添加它们时,当我尝试时出现错误“Constant 'data'在初始化之前使用

这是我的代码:

struct Account: Codable {
    let details: [Details]?

}

struct Details: Codable {
    let id: String?
    let currency: String?
    let interest: Float64?
    let date: String?
}
class DetailViewModel {

    private let data: Details?
    
    init(data: Details) {
        self.data = data
    }
}

测试:

class DetailViewModelTest: QuickSpec {
    override func spec() {
                
        var viewModel : DetailViewModel!
        let data: Details!
        viewModel = DetailViewModel(data: data) // I have error in this line
  }
}

有没有办法在没有参数的情况下实例化我的视图模型?或者更好的方法来处理这个问题?

你应该:

let data: Details = Details() // create your data

要在具有硬编码值的测试中使用详细信息,您需要从一些 json 创建它或添加另一个 init 来初始化所有值,这里我使用后者。我将它添加到扩展中并创建了一个静态方法,该方法使用 init 创建一个具有硬编码值的对象。

extension Details {
    private init(id: String, currency: String, interest: Float64, date: String) {
        self.id = id
        self.currency = currency
        self.interest = interest
        self.date = date
    }

    static func createStub() -> Details {
        Details(id: "1", currency: "EUR", interest: 1.23, date: "2022-02-12")
    }
}

这是一种实现方式,init 可以设计成多种方式,但这是向您展示如何继续前进。

这可以在测试中使用class

class DetailViewModelTest: QuickSpec {
    override func spec() {
        let viewModel = DetailViewModel(data: Details.createStub())
    //...
    }
}