单元测试 VIPER 协议
Posted
技术标签:
【中文标题】单元测试 VIPER 协议【英文标题】:unit testing VIPER protocols 【发布时间】:2020-06-15 23:36:25 【问题描述】:在阅读了几篇关于这个问题的帖子和文章后,我仍然对如何在 VIPER 架构中测试方法(例如使用 Swift)感到困惑。
如果我有这个代码:
主讲课
protocol InteractorToPresenterProtocol: class
func showInfo(info: Info)
class Presenter
private var interactor: PresenterToInteractorProtocol?
init()
func makeSomeStuffInPresenter()
// make some stuff
...
interactor?.makeSomeStuffInInteractor()
extension Presenter : InteractorToPresenterProtocol
func showInfo(info: Info)
print(info)
交互类:
protocol PresenterToInteractorProtocol: class
func makeSomeStuffInInteractor()
class Interactor
private var presenter: InteractorToPresenterProtocol?
init()
extension Interactor : PresenterToInteractorProtocol
func makeSomeStuffInInteractor()
// make some stuff
...
presenter?.showInfo(info)
我应该如何测试 makeSomeStuffInPresenter 方法?
【问题讨论】:
制作Presenter并调用方法?不清楚困难在哪里。 这对我来说很难的原因是makeSomeStuffInInteractor的结果没有在那个方法中返回,而是调用了另一个方法。makeSomeStuffInInteractor的结果确实是在我的presenter showInfo方法中获得的。跨度> 你也可以做一个交互器,或者你可以使用依赖注入来武装自己,用一个交互器的模拟。 是的,我可以注入交互器并模拟它。 【参考方案1】:您可以查看附件sample.
viper架构的基本了解如下。
视图:管理向用户显示的视图。 交互者:处理业务逻辑。 Presenter:控制 View 和 Interactor 之间的通信。 实体:是模态类。 路由器:负责管理导航。
编写单元测试用例。
对于 Interactor :您可以选择 Interactor 协议来模拟类,并使用正面和负面案例调用它的函数,您的 Presenter 将满足测试用例的期望。
对于 Presenter :同样,您可以模拟 Interactor、View 和调用 Presenter 函数,视图将满足测试用例的期望。
一般来说,对于 V,I,P,E,R 中的每个区域 z,您可以模拟到其他 4 个具有模拟简单化和可重复性的区域,以便被测区域 (ZUT) 是唯一正在执行真实源代码的区域(孤立地)。
【讨论】:
附上的样本很清楚!以上是关于单元测试 VIPER 协议的主要内容,如果未能解决你的问题,请参考以下文章
手撸golang 学etcd 手写raft协议之12 单元测试