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())
//...
}
}
我正在尝试实例化我的视图模型以进行测试,在这种情况下我不需要它的参数,但是当它要求我添加它们时,当我尝试时出现错误“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())
//...
}
}