Tag: 模式语言

设置Clean Swift模式有助于编写单元测试

您是否知道这些时刻可以启动应用程序,说服自己需要通过编写尽可能多的单元测试来证明质量? 在那之前,您发现几乎不可能或花费大量时间编写适当的单元测试。 好了,我有了这些时刻,并开始意识到,您的应用程序中的良好模式有助于编写单元测试。 好的模式是第一位的 为了编写更好的单元测试,您需要一个一致的模式。 如果您想编写更好的单元测试,那么MVC模式绝对不是最佳模式。 大多数情况下,您会得到一个非常大的ViewController ,其中包含各种工作:Massive View Controller。 在良好的模式下,每个组件都充当独立于任何其他组件的黑匣子。 黑匣子里面发生了什么,您不知道也不在乎。 但是这些黑匣子应具有定义明确的输入和输出。 在一致的结构中,应该更容易识别组件,测试主题,输入和输出。 代码独立性是通过在Swift中使用协议来实现的。 通过使用协议,一个组件不会直接拥有另一个组件,而是通过协议间接引用了该组件。 这样,这两个组件不会互相了解,但是都依赖于相同的协议。 在将数据从一个组件发送到另一个组件时,模型结构可以在Swift中提供数据独立性。 通过为数据请求,数据响应和视图模型创建单独的模型,可以避免在更改一个模型时还必须更改将模型用作输入或输出的对象以外的组件。 这也适用于他们的测试,这使这些测试不那么脆弱。 我遇到的一个不错的模式是使用VIP循环的Clean-Swift 。 在这种模式下,一切都会通过一个VIP循环朝一个方向前进。 它从ViewController开始,到Interactor ,再到Presenter ,最后回到ViewController 。 两个组件通过包含输出和输入逻辑的协议相互通信。 ViewController处理显示逻辑, Interactor业务逻辑和Presenter表示逻辑。 对于单元测试,这意味着您可以在每个边界上测试所有协议方法,因此它将完全覆盖所有组件。 哪里去了? 开始时,可​​能不清楚在代码中的什么位置。 为了更好地理解我们所追求的模式的实现,我将举一个例子。 在此示例中,我在UITableViewController中显示电影标题及其发行年份的列表。 电影的模型如下所示: 结构电影{ 让标题:字符串 让releaseDate:字符串 } 首先,我创建一个具有Interactable- , Presentable-和Displayable协议的ListMoviesViewController , ListMoviesInteractor和ListMoviesPresenter 。 如果您开始编写应用程序代码,则最简单的方法是先从ViewController , Interactor和Presenter开始 。 开始编写单元测试时,最简单的方法是从Interactor , Presenter和ViewController开始 。 在VIP模式中, […]