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" 甚至可能不存在。例如,它可能会完全内联该操作,或者如果它可以证明该值从未更改过,则完全消除它。
这里有一点背景:
我正在尝试测试一些功能。我不能更改函数中的任何内容或任何 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" 甚至可能不存在。例如,它可能会完全内联该操作,或者如果它可以证明该值从未更改过,则完全消除它。