【发布时间】:2015-11-16 03:59:25
【问题描述】:
我应该如何在 iOS 应用程序中对我的视图控制器(UIViewController 子类)进行单元测试?
在过去的几天里,我一直在广泛地搜索这个主题,但我仍然不明白这样做的正确方法是什么。
看来单元测试视图控制器逻辑至少有三种方式:
公开您想要进行单元测试的私有操作和 IBOutlets(在头文件中声明它们)。
使用
Tests等类别从单元测试中访问私有操作和IBOutlets。-
不要暴露任何东西,而是通过标题或其他公共属性查找按钮和其他视图,并通过公共 UIView 方法模拟用户交互(例如,模拟用户点击按钮);然后观察可见状态。
我没有找到很多关于这个的来源,但是objc.io上有一个例子。
现在,老实说,我不太喜欢前两个,因为据我了解,单元测试不应该测试对象的内部结构(即私有方法),并且仅为了测试而将它们声明为公开并不这似乎不是最佳做法。我通常将 IBActions 和 IBOutlets 保留在实现中,但现在我突然不得不公开所有内容,只是因为我要添加测试......
我认为可能还有另一种选择:将尽可能多的逻辑从我的视图控制器转移到独立的组件中,然后测试它们(让控制器未经测试或大部分未经测试)。这似乎是个好主意,但我必须进行大量重构(我目前正在为一个没有考虑测试的项目添加单元测试)。
所以我想知道,测试视图控制器的最佳方法是什么?
【问题讨论】:
标签: ios unit-testing uiviewcontroller