swift - 无法在 SKProductsResponse 模拟中设置 invalidProductIdentifiers
问题描述
我正在尝试对我的支付模块进行单元测试,为此我正在尝试模拟 SKProductsResponse 和它返回的属性。
我从 products 属性开始,它运行良好。但是当我用在运行时中断的 invalidProductIdentifiers 尝试同样的事情时......这是代码
首先我尝试通过扩展类
class ProductsResponse:SKProductsResponse
{
init(products:[SKProduct], invalidProducts:[String])
{
super.init()
self.setValue(products, forKey: "products")
self.setValue(invalidProducts, forKey: "invalidProductIdentifiers")
}
}
然后通过扩展
extension SKProductsResponse
{
convenience init(products:[SKProduct], invalidProducts:[String]) {
self.init()
self.setValue(products, forKey: "products")
self.setValue(invalidProducts, forKey: "invalidProductIdentifiers")
}
}
两者都会导致相同的问题,但仅适用于 invalidProductIdentifiers -> 捕获“NSUnknownKeyException”、“[ProductsResponse setValue:forUndefinedKey:]:此类不符合 key value coding-compliant 对于 key invalidProductIdentifiers。”
你知道为什么或有任何替代这种方法的想法吗?谢谢!
解决方案
好吧,我仍然不知道发生了什么,但我意识到我可以像这样简单地覆盖“invalidProductIdentifiers”的getter:
override var invalidProductIdentifiers: [String] {get{ return invalidIds}}
private var invalidIds:[String] = []
init(products:[SKProduct], invalidProducts:[String])
{
super.init()
invalidIds = invalidProducts
}
这很好用。
推荐阅读
- excel - 使用 VBA 解锁受保护的单元格
- angular - 有没有办法为同一个 Angular 应用程序结合 CSR 和 SSR?
- javascript - 在外部 js 文件中操作 Vue 数据
- c++ - 如何在 (Android Studio) NDK (C / C++ API) 中运行 Tensorflow-Lite 推理?
- mysql - 如何修复 SQL 中的错误代码:1318?
- vba - Word VBA - 插入第二个表,然后开始填充它
- html - 如何使用打字稿根据选择选项显示/隐藏div
- c# - Microsoft 规划器 API 返回 HTTP 500
- apache - .htaccess 问题重定向 301 -
- python-3.x - 如何比较熊猫数据框中的值