Swift 单元测试如何使用私有二传手进行设置



这里有一点背景:

我正在尝试测试一些功能。我无法更改函数或任何类变量中的任何内容。

所以我在我的单元测试中调用这个函数,问题是,有一个布尔标志,如果这个标志没有设置为 true,这个方法根本不会执行。但是这个标志有一个私人二传手,所以我可以直接设置它。

问周围有人告诉我在测试文件中使用扩展名来设置变量,但是我已经尝试过,如果扩展名与函数不在同一个文件中,我认为我无法设置它。我做错了什么吗?或者有没有其他方法可以测试它?

他们指的是在带有待测类的文件中放置一个扩展名。因此,如果您有类似以下内容:

class ToBeTested {
    private(set) var bool: Bool
}

您可以添加内部资源库:

extension ToBeTested {
    func setBoolTrue() { bool = true }
}

但这必须与ToBeTested在同一个文件中。如果无法修改该文件,则这不是可解决的问题。如果需要以这种方式进行测试,则需要将类设计为允许这样做。

当一个属性被标记为private(set)时,编译器可以假定这个值不能在这个文件之外以任何方式更改。这允许它应用优化,如果属性在此文件之外可更改,则可能无效。如果编译器确定不需要"setter 方法",则它甚至可能不存在。例如,它可以完全内联该操作,或者如果它可以证明值永远不会更改,则可以完全消除该操作。

最新更新