Swift 如何对具有依赖项的函数进行单元测试

Swift how to unit test a function with dependencies

您好,我是模拟和存根的新手,因为这些是我听说过的概念,但实际上还没有看到解释其工作原理的示例。我了解基本的单元测试,但我还没有找到一个地方可以通过一个关于模拟和存根的简单示例来获得解释。

在我的应用程序中,我想测试这两个功能,但由于存在依赖关系,我不知道如何去做。

private func setOverviewValues(weeklyData: CDPRewards, formattedTotal: String, displayMode: PointsDescriptionMode) {
    let monthYearString = createSubtitle(from: displayMode, with: weeklyData)
    view.setOverAllPoints(topValue: formattedTotal, bottomValue: monthYearString)
}

 private func createSubtitle(from displayMode: PointsDescriptionMode, with weeklyData: CDPRewards) -> String {

    switch displayMode {
    case .weeklyPoints:
        if let monthString = weeklyData.month,
            let yearString = weeklyData.year {
            return displayMode.rawValue + monthString + " " + yearString
        }
        return PointsDescriptionMode.weeklyPoints.rawValue
    default:
        return displayMode.rawValue
    }
}

我想帮助展示如何实现对这些功能的测试,或者只是一个演示模拟和存根的简单示例。在我可以使用的书籍或博客方面指出正确的方向也很棒。

这是简短的回答。

我不对 private 函数/方法进行单元测试,只是 public API。事实上,在这里您对组件的内部结构不感兴趣,而只对它在外部世界的行为感兴趣。

这是长答案。

在您的特定情况下,我只对第二个函数进行单元测试。为什么?因为第一个包含副作用。您将修改视图中的某些内容。并且很难使用单元测试来测试视图。对于视图,我会使用验收测试(例如用户界面测试)。

返回到第二个函数的测试,我将使用基于值的单元测试

因此,给出特定的输入,您应该期望得到正确的输出。还应测试边缘情况。

这里有一些关于该主题的有用链接:

这是我推荐阅读的一本书(不是Swift而是Java):

  • 在测试的指导下发展面向对象的软件