Alamofireを使用して、JSONを返すことを期待するリモートURLを照会するSwift 2コードがあります。十分に正しく動作することを合理的に確信するために、十分な対話型テストを行っています。今私はそれを単位テストしたいので、私はこのコードに頼り、他のものに移ることができます。Alamofireレスポンスのみを模擬するにはどうすればよいですか?
私は数十年にわたってOO Perlをプログラミングしてきましたが、私はSwiftには新しいので、おそらく私が見逃したことがあります。
これまでのチェックコードの設定方法(ヤクシェシを避けるためにユーザー名とパスワードを削除する方法など重要ではないもの)呼び出しコードはユーザー名とパスワードを指定し、結果が取得されるたびに2つのコールバックの1つが呼び出されることを想定しています。 (私は取得していない限り、エラーに対処するようなので、サイド追跡され、その対象に乗らないで下さい。)
struct checkUsernameHandler {
var onSuccess:() ->()
var onFailure:() ->()
}
struct checkUsernameOutput {
var authenticated: Bool?
}
func checkUsername(user: User, handler: checkUsernameHandler) {
Alamofire.request(.PUT, NSURL(string: baseURL + "/user/verify?key=" + apiKey)!,
parameters: [
"username": user.username!,
"password": user.password!,
],
encoding: .JSON
).responseJSON { response in
let checkusernameOutput = self.analyseCheckUsernameResponse(response)
if let authenticated = checkusernameOutput.authenticated {
if authenticated {
handler.onSuccess()
} else {
handler.onFailure()
}
}
}
}
func analyseCheckUsernameResponse (response: Response<AnyObject, NSError>) -> checkUsernameOutput {
var output = checkUsernameOutput()
if (response.result.isSuccess) {
if let JSON = response.result.value as? NSDictionary {
// ...
}
} else {
print("Didn't get proper JSON or something: \(response.result.error)")
}
return output
}
は何を私が探していることは、生のJSONを取って、それを渡す方法です何らかの理由でAlamofireに返信したので、何も得られなかった場合(タイムアウト?)、返されたデータが無効な場合(HTML形式の404または500ページなど)、適切なものを含むレスポンスオブジェクトを生成できます。
私は関数checkUsernameを使用していますので、 "OHHTTPStubsを使用する"と言う人には興味がありません。私は不確かなコードだけをテストしていますが、これは私が書いたコードです。
EDITは:Alamofireの内部が十分に偽のレスポンスを作成することに接続されているように見え、より多くのいくつかについてfaffedた、私はかなりのすべてのネットワーク接続とにかくを立ち上げる作業の操作を行う必要があります。だから、おそらく答えは "それはあまりにも面倒です"ですか?
あなたは「モックAlamofire」で検索しました、があるように思われますhttps://github.com/Alamofire/Alamofire/blob/master/Tests/URLProtocolTests.swift#L27-L81やhttp://stackoverflow.com/questions/26918593/unit-testing-http-trafficのようないくつかの有益な提案-in-alamofire-app – Michael
はい、なぜ私はスタック全体を嘲笑することに興味がないと言ったのですか。 –
レスポンスのみを模擬する方法がありますか? –