Swift如何使用依赖项对函数进行单元测试

时间:2018-04-17 03:56:17

标签: swift unit-testing mocking stubbing

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

在我的应用程序中,我有两个我想测试的函数,但由于存在依赖性,我不知道如何去做。

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
    }
}

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

1 个答案:

答案 0 :(得分:1)

这是简短的回答。

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

这是一个很长的答案。

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

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

因此,给出具体的输入你应该期望正确的输出。还应测试边缘情况。

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

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

  • 以测试为指导的不断发展的面向对象软件