首页 > 解决方案 > 无法在 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。”

你知道为什么或有任何替代这种方法的想法吗?谢谢!

标签: swiftunit-testing

解决方案


好吧,我仍然不知道发生了什么,但我意识到我可以像这样简单地覆盖“invalidProductIdentifiers”的getter:

override var invalidProductIdentifiers: [String] {get{ return invalidIds}}
private var invalidIds:[String] = []
init(products:[SKProduct], invalidProducts:[String])
{
    super.init()
    invalidIds = invalidProducts
}

这很好用。


推荐阅读