ios - 如何快速测试闭包
问题描述
我是编写测试用例的新手,所以请不要提出任何建议。
问题 - 我如何为(闭包/高阶函数)而不是 api 调用闭包(不包括它们)编写测试用例,以获得 100% 的覆盖率,我只停留在这部分。
代码 -
init () {
var items:[ReturnPaymentsOptionsModel] = []
items.append(ReturnPaymentsOptionsModel(text: "Unexpected payment or \nunknown sender", isSelected: false))
items.append(ReturnPaymentsOptionsModel(text: "Incorrect currency", isSelected: false))
items.append(ReturnPaymentsOptionsModel(text: "Incorrect amount", isSelected: false))
items.append(ReturnPaymentsOptionsModel(text: "Duplicate", isSelected: false))
items.append(ReturnPaymentsOptionsModel(text: "Auction/Order cancelled", isSelected: false))
items.append(ReturnPaymentsOptionsModel(text: "Charges exceeds the principle amount", isSelected: false))
let observableToggleItems = Observable.just(items)
let tappedItemAction = Observable.combineLatest(observableToggleItems, itemTapped)
.map { argument -> [ReturnPaymentsOptionsModel] in // for this closure im stuck
let (items, indexPath) = argument
var modifiedItems = items
for index in modifiedItems.indices {
if index == indexPath.row {
modifiedItems[index].isSelected.toggle()
} else {
modifiedItems[index].isSelected = false
}
}
return modifiedItems
}.startWith(items)
didFetchToggleItems = Observable.merge(getToggleItems.withLatestFrom(observableToggleItems), tappedItemAction)
}
解决方案
我假设你在这里测试 Rx 链没有问题,但是闭包本身。
那么最好将整个闭包提取到一个可以直接进行单元测试的函数中,然后在 .map 的闭包中调用该函数,例如:
function modifyItems(argument: ([Item], IndexPath)) -> [ITTReturnPaymentsOptionsModel] {
// Your closure here
}
然后是这样的:
let tappedItemAction = Observable.combineLatest(observableToggleItems, itemTapped)
.map { modifyItems($0) }
.startWith(items)
这将允许您独立于 Rx 链对函数进行单元测试。
推荐阅读
- python - 如何在自定义目标函数中重现 LGBM(lightGBM)泊松损失
- javascript - Reactjs如何正确地将参数传递给道具中的函数
- javascript - 如何在谷歌电子表格中保存电报数据?
- xml - 如何在powershell中获取深度xml值
- javascript - ReactJS Axios 外部 API CORS
- pine-script - 如何检查最后一个条件是否为真?
- php - 无法通过索引将数据保存到codeigniter中的mysql数据库中
- vba - 通过vba中的映射表将不同的列名匹配到一个列名
- flutter - 如何从不同的 dart 文件中调用变量以根据给定的值更改图片
- ruby - 为什么我在 ruby 中收到此错误:find_word_lengths 中的块':未定义方法 `[]=' for 3:Integer (NoMethodError)