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

时间:2019-11-26 09:59:53

标签: ios swift xctest xctestcase

嗨,我正在使用弱变量

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 
        }
    }

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

1 个答案:

答案 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)
    }
}