【问题标题】:Swift - Dependency injection in unit testSwift - 单元测试中的依赖注入
【发布时间】:2018-05-08 17:02:24
【问题描述】:

这是我第一次在 swift 中使用依赖注入,我就是这样做的,我有一个在 appDelegate 中初始化的数据管理器,然后传递给我的第一个视图控制器,然后每次它们都会传递给其他视图控制器被推到屏幕上:

  if let navigationCtrl = window?.rootViewController as? UINavigationController {

        if let firstViewController = navigationCtrl.topViewController as? FirstViewController {
            firstViewController.dataManager = dataManager
        }
    }

现在这样做,一切都很好,但是当我去测试每个视图控制器时,我总是让 dataManger 为 nil,我知道这是因为我首先给出的条件。那么有没有办法确保 topViewController 总是有 dataManager 变量而不从另一个 ViewController 继承。谢谢

【问题讨论】:

    标签: ios iphone swift unit-testing


    【解决方案1】:

    其中一个正在发生:

    • windownil
    • window?.rootViewController 不是 UINavigationController
    • navigationCtrl.topViewController 不是 FirstViewController
    • firstViewController.dataManagernil

    这应该是一个简单的调试。放置一些断点和/或print 语句以了解问题所在。

    提示:

    • 确保在 XCode/Interface-Builder 中正确设置视图控制器的类。

    【讨论】:

    • 很好,我为此添加了一个提示:确保在 XCode/Interface-Builder 中正确设置视图控制器的类。是否设置为FirstViewController
    • 是的。也许我没有在我的问题中澄清更多。但问题是,例如在测试 thirdView 控制器时,我不通过 firstViewcontroller 直接呈现第三个控制器,这就是为什么 navigationCtrl.topViewController 不是 FirstViewController,在这种情况下它是第三个视图控制器,因此它不会通过条件
    • 我不确定您是否提供了足够的详细信息以便我们提供一个好的答案。听起来你在做某些 segues 时很难准备视图控制器?您能否为您的问题添加更多详细信息/上下文?
    猜你喜欢
    • 2021-06-19
    • 1970-01-01
    • 2017-04-01
    • 2017-02-07
    • 1970-01-01
    • 2021-05-29
    • 2018-03-03
    相关资源
    最近更新 更多