您好我是嘲笑和捣乱的新手,因为这些是我听过的概念,但实际上还没有看到一个解释其工作原理的例子。我理解基本的单元测试,但我还没有找到一个地方,我可以用一个关于模拟和存根的简单例子来解释。
在我的应用程序中,我有两个我想测试的函数,但由于存在依赖性,我不知道如何去做。
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
}
}
我想帮助向我展示如何实现这些功能的测试,或者只是一个演示模拟和存根的简单示例。在我可以使用的书籍或博客方面指出正确的方向也是很棒的。
答案 0 :(得分:1)
这是简短的回答。
我不是单元测试private
函数/方法,而只是公共API。事实上,在这里,你对组件的内部结构不感兴趣,而只对外部世界的行为感兴趣。
这是一个很长的答案。
在你的特定情况下,我只是单元测试第二个函数。为什么?因为第一个包含副作用。您将修改视图上的某些内容。使用单元测试很难测试视图。对于视图,我会使用验收测试(例如用户界面测试)。
回到第二个函数的测试,我将使用基于值的单元测试。
因此,给出具体的输入你应该期望正确的输出。还应测试边缘情况。
这里有一些关于这个主题的有用链接:
这是我推荐阅读的一本书(它不是Swift而是基于Java):