【发布时间】:2017-05-19 15:17:38
【问题描述】:
当我在标准 MVC 项目中运行此代码时,一切正常:我可以以编程方式将操作发送到我的 UISlider。
override func viewDidLoad() {
super.viewDidLoad()
slider = UISlider(frame: CGRect(x: 100, y: 100, width: 200, height: 50))
slider.minimumValue = 1
slider.maximumValue = 100
slider.addTarget(self, action: #selector(sliderTouch), for: .touchUpInside)
slider.sendActions(for: .touchUpInside)
}
func sliderTouch(sender: UISlider) {
print("value: \(sender.value)")
}
现在由于某种原因,当我想在我的 UT 中模拟 Slider 行为时,它不起作用。这是代码:
func testSlider() {
let slider = UISlider(frame: CGRect(x: 100, y: 100, width: 200, height: 50))
slider.minimumValue = 1
slider.maximumValue = 100
slider.addTarget(self, action: #selector(sliderTouch), for: .touchUpInside)
slider.sendActions(for: .touchUpInside)
}
func sliderTouch(sender: UISlider) {
print("value: \(sender.value)")
}
sliderTouch() 在 UT 案例中从未被调用,据我了解,sendActions 不是asnyc,应该直接调用操作方法。
那么为什么我会出现这种行为,我该如何解决呢?
编辑:我还需要它用于其他 UIKit 控件,例如 UISwitch、UISegmentedControl、UIDatePicker 等...
【问题讨论】:
-
你想抓住机会吗?
-
以什么方式测试您的组件与 UIKit 提供的动作调度功能?如果你想测试你的触摸处理,你可以直接调用action方法,比如
sliderTouch(sender: slider)。 (这无助于澄清这一点,您的testSlider测试函数没有实际的测试断言,因此总是通过。) -
@JeremyW.Sherman 我的用例不是上面的 sn-p。我刚刚写了 sn-p 来说明主要问题是什么。实际上,我在库中有一个自定义 Slider,它以某种方式对动作调度做出反应,我想测试该行为是否正确。我没有在上面的 sn-p 中写断言,所以我尽量不混淆你并保持问题清晰:)
标签: ios swift unit-testing xctest