End*_*esh 6 tdd unit-testing ios swift swift3
在UnitTest中激活ViewDidAppear:
在回答我的问题之前,我知道有一个问题与这个问题非常类似(单元测试不会调用viewDidAppear方法),但似乎没有回答这个问题.
我想知道如何最好地激活viewDidAppear()viewController来测试该方法中应该发生的各种事情.我很确定viewDidAppear()直接打电话是不好的做法; 所以我想知道如何在测试中间接调用它.
我已经按照娜塔莎的教程https://www.natashatherobot.com/ios-testing-view-controllers-swift/进行了操作,因此发现了如何激活viewDidLoad()而无需直接调用它.在底部附近讨论了使用beginAppearanceTransition(true, animated: true)间接调用它,但这对我来说似乎没有预期的结果.
有什么建议?谢谢!
小智 13
您应首先为viewWillAppear调用beginAppearanceTransition,然后为viewDidAppear调用endAppearanceTransition.endAppearanceTransition本身不会执行viewDidAppear:
迅速
sut.beginAppearanceTransition(true, animated: true)
sut.endAppearanceTransition()
Run Code Online (Sandbox Code Playgroud)
目标 - C.
[self.sut beginAppearanceTransition:YES animated:NO];
[self.sut endAppearanceTransition];
Run Code Online (Sandbox Code Playgroud)
我认为viewDidAppear(false)直接打电话进行单元测试并不是一种糟糕的做法.我已经完成了数百次单元测试,没有任何不良影响.毕竟viewDidAppear,viewWillAppear和其他的生命周期方法是正义的.方法.
但是,我知道为单元测试设置视图层次结构很可怕.对于每个iOS版本,不确定Apple将对私有实现做出哪些改变可能会破坏您的视图控制器测试.但到目前为止,我见过的唯一警告是,有时您必须将控制器的视图添加到窗口,尤其是在测试呈现控制器时.
我还打电话loadView()和viewDidLoad()直接.我通常在setup视图控制器单元测试的部分中调用这两种方法.这使我无法设置复杂的视图控制器层次结构,从而允许我将每个视图控制器作为一个单元进行测试.
另一方面,直接在生产代码中调用这些方法是不好的做法,应该避免.
| 归档时间: |
|
| 查看次数: |
2066 次 |
| 最近记录: |