【发布时间】:2017-09-05 09:47:04
【问题描述】:
我有一个 Swift 类,它只为 iOS 11 计算一些东西。这意味着我有以下检查:
if #available(iOS 11, *) {
//do magic
}
我想知道如何模拟#available 进行单元测试。我想测试一下:
- 如果使用正确的参数调用
#available - if 语句中的代码。为此,我希望有一种方法可以强制执行
if #available(iOS 11, *)语句的结果。
更新:
由于遇到这些困难,我改变了态度并搬到了:
let result = device.systemVersion.compare("11", options: .numeric)
return result == .orderedSame || result == .orderedDescending
非常感谢任何问题的答案!
【问题讨论】:
-
嘿@DávidPásztor,谢谢你的文章。也许我误解了这篇文章,但是用这种方法我无法测试我的两点,不是吗?我的 SUT 包含该 if 语句。即使我使用策略设计模式,我仍然无法测试我提到的两点。如果我错了,请随时添加答案。
-
如果我正确理解了文章中的最后一个提示,为特定 iOS 版本设置构建目标应该可以让您在测试中执行
#available语句。不过我还没有测试过,所以不能保证它的正确性。 -
以上有什么更新吗?我也面临同样的问题。
-
嗨@Shyam,我不得不改变方法:stackoverflow.com/a/46511901/5109911
标签: swift unit-testing mocking