编写测试用例时弱变量变为零?

weak variable is becoming nil while writing testcase?

您好,我正在为 ViewModel 中的函数编写测试用例,其中我使用了一个弱变量

在测试函数时,弱变量变为 nil ,我还在调用测试函数之前实例化了它并为该对象提供了值。为什么会变成 nil ,然后怎么测试呢!!!

另外我不能使弱变量成为强类型!!,正在处理其他代码

编译器警告 - 实例将被立即释放,因为 属性 'source' 是 'weak'

代码

func testFundTrip() {
     viewModel.source = SourceViewTypeMock()
     viewModel.fundTrip(trip)
}

在 ViewModel 中

func fundTrip(_ trip: TravelTrip) {
        if let source = source { 
          // Here source is becoming nil ?? why 
        }
    }

是否有带有变量范围的测试用例方法?

这个警告告诉你到底发生了什么。你只有一个指向一个值的弱指针,所以没有什么能让你的 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)
    }
}