Swift单元测试如何设置为私有setter

Swift Unit Test how to set with a private setter

这里有一点背景:

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

所以我在我的单元测试中调用了这个函数,问题是,有一个布尔标志,如果这个标志没有设置为真,这个方法就不会执行。但是这个flag有私有的setter,所以我可以直接设置

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

他们指的是在 class-under-test 文件中放置一个扩展名。所以如果你有这样的东西:

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

您可以添加一个内部 setter:

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

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

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