这里有一点背景:
我正在尝试测试一些功能。我无法更改函数或任何类变量中的任何内容。
所以我在我的单元测试中调用这个函数,问题是,有一个布尔标志,如果这个标志没有设置为 true,这个方法根本不会执行。但是这个标志有一个私人二传手,所以我可以直接设置它。
我问周围有人告诉我在测试文件中使用扩展名来设置变量,但是我已经尝试过,如果扩展名与函数不在同一个文件中,我认为我无法设置它。我做错了什么吗?或者有没有其他方法可以测试它?
他们指的是在带有待测类的文件中放置一个扩展名。因此,如果您有类似以下内容:
class ToBeTested {
private(set) var bool: Bool
}
您可以添加内部资源库:
extension ToBeTested {
func setBoolTrue() { bool = true }
}
但这必须与ToBeTested
在同一个文件中。如果无法修改该文件,则这不是可解决的问题。如果需要以这种方式进行测试,则需要将类设计为允许这样做。
当一个属性被标记为private(set)
时,编译器可以假定这个值不能在这个文件之外以任何方式更改。这允许它应用优化,如果属性在此文件之外可更改,则可能无效。如果编译器确定不需要"setter 方法",则它甚至可能不存在。例如,它可以完全内联该操作,或者如果它可以证明值永远不会更改,则可以完全消除该操作。