编写测试用例时弱变量变为零?
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)
}
}
您好,我正在为 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)
}
}