首页 > 解决方案 > 将单例设置为 nil 是一个好策略还是永远不应该设置为 nil?[iOS,斯威夫特]

问题描述

我知道我们应该完全避免singleton,因为它很难测试它们unit testing。假设有人为它编写了代码singleton,我被分配了为其编写代码的任务unit tests

是设置singleton一个nil好的策略还是永远不应该设置为零?

如果对它们进行设置是nil策略,那么我应该将其设为 anoptional还是应该创建一个private setterand public getter,然后再编写reset()函数 to make singleton nil

为什么我要设置nilunit testsingleton class.

好的,我想扩展这个问题。假设将单例设置为零并不是一个好习惯。另一个需要考虑的问题是,假设有人已经为单例类编写了代码。

现在他们已经给你分配了任务来测试那个单例类。(不是使用它们的其他类)。

如何解决这个问题?至于 SUT,我们大多在 setup() 方法中分配 SUT,在 teardown() 方法中设置为 nil。但由于它是单例,我们不能设置为 nil,而且在 setup() 中我也不能分配它,我们可以一次又一次地引用同一个对象。

标签: iosswift

解决方案


首先,Singleton 类永远不应该为零。正如它的名字所说,我们只为单例类分配内存一次。
如果你想测试你不能'deinit'单例类,你可以像创建方法一样做。
例如,如果您的单例类与 NotificationManager 类似,则创建两个方法 subscribeForNotification() 和 unsubscribeForNotification() 您可以在单例类中初始化或取消初始化对象,但不能取消初始化单例类。


推荐阅读