ios - 将单例设置为 nil 是一个好策略还是永远不应该设置为 nil?[iOS,斯威夫特]
问题描述
我知道我们应该完全避免singleton
,因为它很难测试它们unit testing
。假设有人为它编写了代码singleton
,我被分配了为其编写代码的任务unit tests
。
是设置singleton
一个nil
好的策略还是永远不应该设置为零?
如果对它们进行设置是nil
策略,那么我应该将其设为 anoptional
还是应该创建一个private setter
and public getter
,然后再编写reset()
函数 to make singleton
nil
?
为什么我要设置nil
为unit test
在singleton class
.
好的,我想扩展这个问题。假设将单例设置为零并不是一个好习惯。另一个需要考虑的问题是,假设有人已经为单例类编写了代码。
现在他们已经给你分配了任务来测试那个单例类。(不是使用它们的其他类)。
如何解决这个问题?至于 SUT,我们大多在 setup() 方法中分配 SUT,在 teardown() 方法中设置为 nil。但由于它是单例,我们不能设置为 nil,而且在 setup() 中我也不能分配它,我们可以一次又一次地引用同一个对象。
解决方案
首先,Singleton 类永远不应该为零。正如它的名字所说,我们只为单例类分配内存一次。
如果你想测试你不能'deinit'单例类,你可以像创建方法一样做。
例如,如果您的单例类与 NotificationManager 类似,则创建两个方法 subscribeForNotification() 和 unsubscribeForNotification() 您可以在单例类中初始化或取消初始化对象,但不能取消初始化单例类。
推荐阅读
- python - 如何使用证书和 rsa 密钥连接到服务器
- tomcat - 登录到 jaspersoft 时重定向循环
- javascript - jQuery - 如何用标签包装输入标签
- amazon-cloudformation - 如何将角色传递给 cli 命令“aws cloudformation deploy”或“sam deploy”?
- ldap - 带有 Liferay 的 LDAP - 存在的未知主机
- google-apps-script - 有没有办法为用户删除谷歌脚本中的保护?
- python - Keras:如何评估模型准确性(evaluate_generator vs. predict_generator)?
- c# - 多对多关系添加项目
- c# - 如何使用联合更高效地进行 LINQ 查询
- html - 如何平滑地动画隐藏侧边栏,这会影响其他区域的大小