swift - 单元测试 VIPER 协议(protocol)

标签 swift unit-testing viper-architecture

在阅读了几篇关于这个问题的帖子和文章后,我仍然对如何在 VIPER 架构(例如使用 Swift)中测试方法感到困惑。

如果我有这段代码:

Presenter类

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 方法?

最佳答案

您可以查看附件sample.

下面是对 viper 架构的基本理解。

View :管理显示给用户的 View 。 Interactor:处理业务逻辑。 Presenter:控制View和Interactor之间的通信。 实体:是模态类。 Router:负责管理Navigation。

编写单元测试用例。

对于 Interactor :您可以将 Interactor 协议(protocol)选择为模拟类,并使用正面和负面案例调用它的功能,您的 Presenter 将满足测试用例的期望。

对于 Presenter :同样,您可以模拟 Interactor、View 并调用 Presenter 函数, View 将满足测试用例的期望。

一般来说,对于 {V,I,P,E,R} 中的每个区域 z,您可以模拟其他 4 个具有模拟简单完美性和可重复性的模型,以便被测区域 (ZUT) 是只有真正的源代码正在被执行(隔离)的区域。

关于swift - 单元测试 VIPER 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62398690/

相关文章:

iOS 不在 UIWebView iframe 中显示/播放视频

swift - 更新 Embed Swift 标准库设置

ios - VIPER 中的 UIView 动画代码放在哪里?

Swift:在 View Controller 内的 UILabel 中使用 Int

ios - 具有相同参数类型的 Swift 初始化器

java - 使用自定义参数匹配器第二次调用 Mockito.when 时的 NPE

python - 皮西斯。由于execute() 发生错误而阻止执行validate() 方法

unit-testing - Jacoco在我的Gradle项目中未显示Spock代码覆盖率

ios - 为什么在 VIPER 架构中双向使用协议(protocol)而不是单向使用协议(protocol)

ios - 为基于 iOS 的项目实现 MVC vs MVVM vs VIPER 的真实场景