ios - 编写测试用例时弱变量变为零?
问题描述
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
}
}
是否有带有变量范围的测试用例方法?
解决方案
该警告准确地告诉您正在发生的事情。你只有一个指向一个值的弱指针,所以没有什么能让你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)
}
}
推荐阅读
- java - Java:方法 org.postgresql.jdbc4.Jdbc4Connection.isValid(int) 尚未实现
- prolog - 试图在序言中打印出 preOrder Traversal
- html - 显示外部 SVG
- node.js - 如何使基于角色的中间件在nodejs和mongoose中以适当的权限访问api?
- java - 并行垃圾收集器是否在主程序旁边的单独线程上运行
- lua - 丰富的 Lua 智能感知
- r - 如何将 ctree 节点变成向量?
- reactjs - 如何防止 Create React App 强制我安装 TypeScript,因为依赖项中有一个 ts 文件
- hadoop - 如果两个表 hive 中有相似的 coumn 值,则比较两个表并从一个表中删除行
- node.js - Node.js & camaro - 影响 xml 到 json 的转换顺序