• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 如何编写单元测试来检查我的属性是否在 iOS 上的 dealloc 中释放?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 17:10:53 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我对 TDD 和单元测试还很陌生,我正在一个业余项目中尝试一下。

而且我有点卡在对 dealloc 方法进行单元测试。

我们都知道释放自定义属性并在 dealloc 中将它们设置为 nil 是一种很好的做法:

-(void) dealloc{
  [myProperty release];
  myProperty = nil;
  [super dealloc];
}

如何编写检查这种行为的单元测试?

显然,这不起作用:

[myObject release]
STAssertNil(myObject.myProperty,@"myProperty should be released and set to nil in dealloc")

有什么建议吗? 谢谢!



Best Answer-推荐答案


假设您可以执行上述操作,您实际上会测试什么?这是我的想法:

  1. 测试 -release 会减少 retainCount

  2. 测试当 retainCount 达到零时 NSObject 的垃圾回收机制调用 -dealloc

  3. 测试调用 -dealloc 时释放 myProperty

这是单元测试的错误粒度,第 1 点和第 2 点不是您要测试的业务 - 假设它是由 Apple 进行的单元测试。因此,上面唯一的单元测试是:

testing that when -dealloc is called, myProperty is released

现在,这段代码(非常正确)没有任何逻辑,也不会产生任何输出。所以,我认为对它进行单元测试实际上是偏执和不必要的(类似于测试编译器是否实际工作)。

但如果我确实想测试它,我会这样做:

OCMockObject *mockProperty = MOCK(NSObject);
[[mockProperty expect] release];
myObject.myProperty = mockProperty;
[myObject dealloc];
[mockProperty verify];

显然,您通常不应该直接调用-dealloc,但如果您想对-dealloc 进行单元测试,这正是您应该做的(或者它不是单元测试)。鉴于这是非常糟糕的做法,而且测试对您的帮助很小,我认为您不应该打扰。

关于ios - 如何编写单元测试来检查我的属性是否在 iOS 上的 dealloc 中释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5816929/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap