ios - 我应该先为 View 层编写测试(在 TDD 之后)还是只进行手动测试并在完成后添加快照测试?

标签 ios swift uiview uiviewcontroller tdd

正如预期的那样,我通常在使用 View 层遵循 TDD(即首先编写测试)时遇到困难。

也就是说,为了观察或触发某些可见的变化(布局或样式),我需要公开 View 的内部结构。这打破了封装并允许客户端代码执行一些类似 myView.label.text = "User" 的操作。

为了避免这种情况,我将 getter 方法添加到 UIView 类:

var userName: String{ return label.text }

或者做一些只添加到测试框架的扩展:

extension MyView{

//avoids making a getter just for the sake of testing, while keeping it private and interchangeable
var userName : String{
   return (viewWithTag(someLabelTage) as! UILabel).text
} 

另一种方法是跳过 TDD 工作流程(即在功能完成后手动测试)并添加快照测试(参见 https://github.com/pointfreeco/swift-snapshot-testing)以增加覆盖率并在重构时拥有安全网。

考虑到所有这些,我想知道是否有任何其他模式或方法可以用来提高效率,同时保持对代码的信心。

最佳答案

不是 Swift 方面的专家,但无论使用何种语言/框架,某些事情告诉我您实际上正在让您的任务变得更加困难。

I normally have difficulties when following TDD with the view layer.

这是预料之中的。 View 支持简单且完全没有行为(即域逻辑)。它应该是简单的用户交互,并将数据绑定(bind)到 View 中的控件。因此,在我看来,您不需要 TDD 或围绕 View 进行更精确的单元测试。尝试为 View 编写单元测试不会获得太多值(value)。

可以使用 UI 测试框架(例如 Selenium)或您自己的用于测试用户交互的 UI 测试框架更有效地测试您的 View 。通过这种方式,您的投资返回率 (ROI) 比尝试对 View 层进行 TDD 更高。

关于ios - 我应该先为 View 层编写测试(在 TDD 之后)还是只进行手动测试并在完成后添加快照测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53761664/

相关文章:

objective-c - Objective-C : Comparison issue between numbers

iphone - 如何在通话期间将 View 定位在绿色条下方?

ios - 如何在底部将一个 UIView 添加到另一个 UIView

android - 移动(android 和 ios)浏览器忽略隐藏在正文、html 和容器中的溢出

ios - 如果需要,如何重新创建主 Storyboard

objective-c - Cocoa App 中的 Shift + Return 键操作

swift - WKInterfaceTable 中的 WKLongPressGestureRecognizer

ios - 使用 unwind segue 传递数据

ios - 了解 convertRect :toView:, convertRect :FromView:, convertPoint:toView: 和 convertPoint:fromView: 方法

ios - 仅在 iOS 11 上启动画面中间的 Xamarin Forms iOS 黑框