如何使用间谍对 textView 进行单元测试
How to unit test a textView using a spy
我有一个包含 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 的背景颜色设置为透明的东西?
只需从您的声明中删除 private
。然后访问控制将是默认的internal
。在测试代码中,确保 @testable import
以便访问内部功能。
对一些属性进行单元测试并不难。但是,如果您想要记录外观的测试,请查看快照测试。这可以在没有 XCUITestCase 的情况下完成。它比常规单元测试慢一个数量级,但可能比 UI 测试快另一个数量级。
除非你想把myText
的访问级别从private
放宽到internal
(不指定就默认),没有direct 方式来测试它。
我必须间接测试的唯一建议是使用 snapshot testing.
您可以编写两个快照测试,一个对应 MYViewModel
中的每个 .someValue
值。
另一种使视图的测试和可维护性变得简单的方法是引入 ViewConfiguration
值类型,遵循 humble view 模式。
基本上,您可以在 MYViewModel
和 MyCell
之间有一个 struct
来描述 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)
中的代码非常简单——只是一个 1 对 1 的赋值——你无需测试就可以逃脱。
然后您可以编写测试 MyCellViewConfiguration
是如何从 MYViewModel
计算出来的。
我有一个包含 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 的背景颜色设置为透明的东西?
只需从您的声明中删除 private
。然后访问控制将是默认的internal
。在测试代码中,确保 @testable import
以便访问内部功能。
对一些属性进行单元测试并不难。但是,如果您想要记录外观的测试,请查看快照测试。这可以在没有 XCUITestCase 的情况下完成。它比常规单元测试慢一个数量级,但可能比 UI 测试快另一个数量级。
除非你想把myText
的访问级别从private
放宽到internal
(不指定就默认),没有direct 方式来测试它。
我必须间接测试的唯一建议是使用 snapshot testing.
您可以编写两个快照测试,一个对应 MYViewModel
中的每个 .someValue
值。
另一种使视图的测试和可维护性变得简单的方法是引入 ViewConfiguration
值类型,遵循 humble view 模式。
基本上,您可以在 MYViewModel
和 MyCell
之间有一个 struct
来描述 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)
中的代码非常简单——只是一个 1 对 1 的赋值——你无需测试就可以逃脱。
然后您可以编写测试 MyCellViewConfiguration
是如何从 MYViewModel
计算出来的。