json を読み込んで ObjectMapper のクラスのテストを書く
ObjectMapper は Swift の Json Parser の1つです。
Mappable を継承して Entity Object を作る事ができます。
import ObjectMapper
class User: Mappable {
var id: Int = 0
var familyName: String = ""
var givenName: String = ""
required init?(map: Map) { }
func mapping(map: Map) {
id <- map["id"]
familyName <- map["family_name"]
givenName <- map["given_name"]
}
}
extension User {
public var fullName: String {
return familyName + " " + givenName
}
}
このクラスのテストを書くときに、 User のデータを JSON ファイルから読み込んでテストができるようにしていきます。
JSON ファイルの準備
User.json というファイル名で JSON を作成します。
{
"id": 1,
"family_name": "苗字",
"given_name": "名前"
}
JSON の読み込み方法
まず User.json のファイルを読み込みます。
let url = Bundle(for: type(of: self)).url(forResource: "User", withExtension: "json")!
let json = try? String(contentsOf: url)
そして、その json を Mapper で読み込む事ができます。
let mapper = Mapper<User>()
user = mapper.map(JSONString: json!)
実際のテストファイル
ここでは Quick + Nimble でテストを書いています。
用意した User を使い、テストを書いていきます。
イニシャライズは終わっているので、 User の挙動をテストするだけですね。
import Foundation
import Quick
import Nimble
import ObjectMapper
class UserSpec: QuickSpec {
override func spec() {
var user: User!
let mapper = Mapper<User>()
beforeEach {
let url = Bundle(for: type(of: self)).url(forResource: "User", withExtension: "json")!
let json = try? String(contentsOf: url)
user = mapper.map(JSONString: json!)
}
describe("mapping") {
it("JSON のパラメータがマッピング出来ていること") {
expect(user.id).to(equal(1))
expect(user.familyName).to(equal("苗字"))
expect(user.givenName).to(equal("名前"))
}
}
describe("fullName") {
it("全角スペース区切りのフルネームを取得すること") {
expect(user.fullName).to(equal("苗字 名前"))
}
}
}
}
おわり
ObjectMapper を利用した Entity のテストが書けるようになりました。
ネストの深い Object でも JSON を用意すればいいので、テストが簡単にかけます
Swift4 では Codable が出てくるので ObjectMapper が不要になりますね、 Swift4 が待ち遠しいです
Author And Source
この問題について(json を読み込んで ObjectMapper のクラスのテストを書く), 我々は、より多くの情報をここで見つけました https://qiita.com/star__hoshi/items/f6a3def4bddafd21a1d7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .