嗨,我正在使用弱变量
在ViewModel
中为一个函数编写测试用例。
在测试函数时,弱变量变为nil,我也实例化了它,并在调用测试函数之前将值提供给了该对象。为什么它会变为nil,然后如何对其进行测试!!!
我也无法创建弱变量强类型!,正在处理其他代码
编译器警告-由于属性“源”为“弱”,实例将被立即释放
代码
func testFundTrip() {
viewModel.source = SourceViewTypeMock()
viewModel.fundTrip(trip)
}
在ViewModel中
func fundTrip(_ trip: TravelTrip) {
if let source = source {
// Here source is becoming nil ?? why
}
}
是否存在带有变量范围的测试用例方法?
答案 0 :(得分:2)
警告会告诉您确切的情况。您只有一个指向值的弱指针,因此,SourceViewTypeMock
不会在赋值语句之后继续有效。解决方案是创建一个强大的参考。您需要一个不允许编译器优化的函数,因此它必须在此函数之外。因此,您可以将其作为测试用例的属性。
如果它是不可变的,则可以这样操作:
class TheTestCase: XCTestCase {
let sourceMock = SourceViewTypeMock()
func testFundTrip() {
viewModel.source = sourceMock
viewModel.fundTrip(trip)
}
}
如果它是可变的,那么您可能要确保在setUp
中重新创建它:
class TheTestCase: XCTestCase {
var sourceMock: SourceViewTypeMock!
override func setUp() {
sourceMock = SourceViewTypeMock()
}
func testFundTrip() {
viewModel.source = sourceMock
viewModel.fundTrip(trip)
}
}