我正在我的一台UIViewController上测试viewDidLoad事件。
- (void)testMyView
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
MyViewController *vc = [storyboard instantiateViewControllerWithIdentifier:MYID];
[vc viewDidLoad];
STAssertNotNil(vc, @"MyViewController should not be nil");
}
如果我删除行[vc viewDidLoad];
,viewDidLoad
永远不会被触发。
如果我让[vc viewDidLoad];
就位,viewDidLoad
会被触发两次。
我知道视图是延迟加载的,但是我如何避免这种行为呢?
有没有关于视图测试的最佳实践?
发布于 2013-06-12 17:12:41
您需要访问视图才能使其自动加载。
你可以使用这样的东西来做它,而不会有副作用:
vc.view.hidden = NO; // Or YES if it is supposed to be hidden.
哦,然后删除您对viewDidLoad
的手动调用,因为它将不再需要。
发布于 2017-06-07 11:59:22
阅读我的笔记https://github.com/onmyway133/blog/issues/52
假设我们有以下视图控制器
class ListController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
}
}
了解viewDidLoad
我们知道在第一次创建视图时会调用viewDidLoad。因此,在单元测试中,如果使用viewDidLoad触发,就会落入陷阱
func testSetup() {
let controller = ListController()
controller.viewDidLoad()
}
为什么viewDidLoad会被调用两次?
它在您的测试中被调用一次,在您的viewDidLoad方法中,您访问第一次创建的视图,因此它将再次触发viewDidLoad
正确的方式
最佳实践不是自己触发事件,而是做一些事情来使事件发生。在单元测试中,我们只是访问视图来触发viewDidLoad
func testSetup() {
let controller = ListController()
let _ = controller.view
}
发布于 2016-11-29 16:25:17
使用vc view进行延迟加载;
https://stackoverflow.com/questions/17071329
复制