swift - 如何检查在我的单元测试中是否释放了无主引用?
问题描述
我的视图模型是这样的:
public class MainTabBarViewModel: MainTabBarInputs {
unowned var output: MainTabBarOutputs
...
}
视图控制器是这样的:
class ViewController: MainTabBarOutputs {
var viewModel: MainTabBarInputs!
}
我正在尝试编写一个单元测试来测试保留周期:
class MainTabBarViewModelTests: XCTestCase {
var viewModel: MainTabBarViewModel!
var viewController: MockMainTabBarViewController!
func testRetainViewController() {
viewController = nil
// TODO how do you test this
expect(self.viewModel.output).to(beNil())
// crashes because I can't
// reference an unowned pointer that's deallocated.
}
我知道如果我将引用更改为weak
我可以测试它,但如果我想保留它unowned
怎么办?
解决方案
您可以在单元测试中使用对控制器的弱引用,如果该引用变为 nil,则您没有保留周期:
func testRetainViewController() {
weak var testRef = viewController
viewController = nil
expect(testRef).to(beNil())
}
unowned
您可以通过更改 from来轻松验证上述方法,strong
然后查看测试是否失败。
推荐阅读
- html - 创建一个故意溢出的 CSS 网格
- sql - PostgreSQL:如果以下为NULL,则在+1列中设置最大值
- javascript - 如何让 validator.js 发挥作用?
- calendar - Vuetify 日历自定义渲染
- jena - jena 中的 union 和 multi-union 有什么区别?每个是做什么用的?
- javascript - 为什么我的 Expo 应用程序不发送消息?
- spring - 使用函数为弹簧拼写提供值
- jmeter - 尝试从 ActiveMQ WebConsole 中删除持久订阅者时,URL 中的“秘密”参数是什么?
- python - Python:计算用户在推文中使用的图像和视频的数量
- python - 是否可以在没有 GUI 或类的情况下使用 PyQt5 QtSerialPort?