首页 > 解决方案 > 编写测试用例时弱变量变为零?

问题描述

ViewModel嗨,我正在为使用弱变量的函数编写测试用例,

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

另外我不能制作弱变量强类型!!,处理其他代码

编译器警告 - 实例将立即被释放,因为属性“源”是“弱”

代码

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

在视图模型中

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

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

标签: iosswiftxctestxctestcase

解决方案


该警告准确地告诉您正在发生的事情。你只有一个指向一个值的弱指针,所以没有什么能让你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)
    }
}

推荐阅读