2016-08-12 3 views
1

私は特に「受け入れ言語」とその値を、私のアプリが作成する要求をテストしています「EN-US; Q = 1.0」の要求によって.allHTTPHeaderFieldsを[「同意する言語を」]SwiftでNSLocale.preferredLanguagesをテストしてリクエストをテストするにはどうしたらいいですか?

を私はしません? ObjCの問題があります。私はOCMockを使ってNSLocale preferredLanguagesをモックしています(これは、使用するiOSまたはMACコンピュータによって変わります)。

私はSwiftを使用しています。私はSwiftが読み取り専用言語であることを知っています(リアルタイムでは変更できません)。

これをどのように達成できますか?

明らかに、自分のNSLocaleモックを作成してそれをプライベートクラスであるNSURLRequestに注入することはできません。 たぶんスウィズル(アイデアなし)を使用しているか、拡張機能を使用したトリックではないでしょうか。

ご意見やご忠告はありますか?どうもありがとう。

EDIT: NSLocaleはNSObjectのであるため、おそらく私はこの1つに同様のアプローチを使用することができます。 https://github.com/kylef/Mockingjay/blob/master/Mockingjay/NSURLSessionConfiguration.swift

+0

*「スウィフトは読み取り専用言語です」* - あなたはどういう意味ですか? –

+0

これは、反射が非常に限られていることを意味します。 objcの反対側 https://realm.io/news/tryswift-veronica-ray-real-world-mocking-swift/ – Ricardo

答えて

0

は最後に、私は、テスト内のこれを書いて、スウィズルを使用してスウィフト下preferredLanguagesをスタブするために管理しました。

// 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) 
} 
関連する問題