gpt4 book ai didi

ios - 如何在 Swift 中模拟 NSLocale.preferredLanguages 来测试请求?

转载 作者:行者123 更新时间:2023-11-28 06:36:43 25 4
gpt4 key购买 nike

我正在测试我的应用程序创建的请求,特别是“Accept-Language”及其值“en-US;q=1.0”通过 request?.allHTTPHeaderFields?["Accept-Language"]

我在 ObjC 中没有问题,我使用 OCMock 来模拟 NSLocale preferredLanguages(因为这会根据您使用的 iOS 或 MAC 计算机而变化)。

现在我正在使用 Swift,我知道 Swift 是一种只读语言(无法实时更改)。

那么,我该如何实现呢?

显然,我不能创建自己的 NSLocale 模拟并将其注入(inject) NSURLRequest,因为那是一个私有(private)类。也许使用调配(不知道),或者可能是使用扩展的技巧,不知道。

您有什么想法或建议吗?非常感谢。

编辑:由于 NSLocale 是一个 NSObject,也许我可以使用与此类似的方法: https://github.com/kylef/Mockingjay/blob/master/Mockingjay/NSURLSessionConfiguration.swift

最佳答案

最后,我设法使用 swizzle 在 Swift 下对 preferredLanguages 进行 stub ,并将其写入测试中。

// stub preferredLanguages before all the tests start
override class func setUp() {
WAClientTests.exchangePreferredLanguagesImplementation()
}

// stop stubbing preferredLanguages after passing all tests
override class func tearDown() {
WAClientTests.exchangePreferredLanguagesImplementation()
}

static func stubPreferredLanguages() -> [String] {
return ["en-US"]
}

class func exchangePreferredLanguagesImplementation() {
let originalMethod = class_getClassMethod(NSLocale.classForCoder(), #selector(NSLocale.preferredLanguages))
let swizzledMethod = class_getClassMethod(WAClientTests.classForCoder(), #selector(WAClientTests.stubPreferredLanguages))
method_exchangeImplementations(originalMethod, swizzledMethod)
}

关于ios - 如何在 Swift 中模拟 NSLocale.preferredLanguages 来测试请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38919827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com