作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在测试我的应用程序创建的请求,特别是“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/
我是一名优秀的程序员,十分优秀!