我有一个包含textView
的单元格,并且我想测试使用单元测试正确设置了textView
的属性。但是,由于它是私有的,因此在测试中访问textView时似乎遇到了障碍。
有没有一种方法可以测试我的textView :-
这是我的代码
class MyCell {
private let myText: UITextView = {
let textView = UITextView()
textView.isScrollEnabled = false
textView.isEditable = false
return textView
}()
func setup(viewModel: MYViewModel) {
if viewModel.someValue {
myText.backgroundColor = UIColor.red
} else {
myText.backgroundColor = .clear
}
}
}
是否可以测试将testView的背景色设置为清除?
答案 0 :(得分:1)
除非您希望将MATCH (thisB:B)-[:c1]->(a:A)<-[:c1]-(otherB:B)
MERGE (thisB)-[:c2]-(otherBs)
的访问级别从myText
放松到private
(如果未指定,则默认为默认),就没有 direct 测试方式。
我唯一需要间接测试的建议是使用snapshot testing。
您可以编写两个快照测试,对于internal
中每个.someValue
的值进行一次快照测试。
使视图的测试和可维护性变得简单的另一种方法是,按照humble view模式引入MYViewModel
值类型。
基本上,您可以在ViewConfiguration
和struct
之间使用MYViewModel
来描述MyCell
的每个视图属性。
MyCell
struct MyCellViewConfiguration {
let textFieldBackgroundColor: UIColor
}
extension MYViewModel {
var viewConfiguration: MyCellViewConfiguration = {
return MyCellViewConfiguration(
textFieldBackgroundColor: someValue ? .red : .clear
)
}
}
extension MyCell {
func setup(with configuration: MyCellViewConfiguration) {
myText.backgroundColor = configuration.textFieldBackgroundColor
}
}
中的代码非常简单(只需一对一分配),您无需进行测试就可以逃脱。
然后您可以编写测试以测试如何根据setup(with configuration: MyCellViewConfiguration)
计算MyCellViewConfiguration
。
答案 1 :(得分:0)
只需从声明中删除private
。然后,访问控制将是默认的internal
。在测试代码中,请确保@testable import
,以便访问内部功能。
单元测试一些属性并不难。但是,如果要进行记录外观的测试,请查看快照测试。无需XCUITestCase即可完成。它比常规单元测试慢一个数量级,但可能比UI测试快另一个数量级。