Swift单元测试如何使用私人二传手设置

时间:2019-04-01 16:41:22

标签: swift unit-testing access-control private-members

这里有一点背景:

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

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

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

1 个答案:

答案 0 :(得分:-1)

他们指的是在被测类的文件中放置扩展名。因此,如果您有类似的东西:

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

您可以添加内部设置器:

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

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

将属性标记为private(set)时,编译器可以假定该值不能在该文件之外进行任何更改。如果该属性在此文件外部可更改,则允许它应用可能无效的优化。如果编译器确定不需要“ setter方法”,则甚至不存在。例如,它可以完全内联该操作,或者如果可以证明该值从未更改,则可以完全消除该操作。